Clojure ref types: coordinated vs asynchronous
coordinated uncoordinated synchronous Refs Atoms asynchronous Agents
Coordination. A coordinated operation is one where multiple actors must cooperate (or, at a minimum, be properly sequestered so as to not interfere with each other) in order to yield correct results. A classic example is any banking transaction …
In contrast, an uncoordinated operation is one where multiple actors cannot impact each other negatively because their contexts are separated. …
Synchronization. Synchronous operations are those where the caller’s thread of execution waits or blocks or sleeps until it may have exclusive access to a given context, whereas asynchronous operations are those that can be started or scheduled without blocking the initiating thread of execution.
@ClojureBook on classification of concurrent reference types (chapter 4). This table is so great, that it deserves to be cited (and I am too lazy to look for page 173 the next time).