The core.async library is built on an old idea. The foundation upon which it lies was first described by Tony Hoare of Quicksort fame in his 1978 paper Communicating Sequential Processes (CSP)[1]. CSP has since been extended and implemented in several languages, the latest of which being Google's Go programming language[2].
It is beyond the scope of this book to go into the details of this seminal paper, so what follows is a simplified description of the main ideas.
In CSP, work is modeled using two main abstractions: channels and processes. CSP is also message-driven and, as such, it completely decouples the producer from the consumer of the message. It is useful to think of channels as blocking ...