Use Agents for Asynchronous Updates
Some applications have tasks that can proceed independently with minimal coordination between tasks. Clojure agents support this style of task.
Agents have much in common with refs. Like refs, you create an agent by wrapping some piece of initial state:
Create a counter agent that wraps an initial count of zero:
Once you have an agent, you can send the agent a function to update its state. send queues an update-fn to run later, on a thread in a thread pool:
Sending to an agent is very much like commuting a ref. Tell the counter to inc: