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).