Using channels
The
core.async
library (https://github.com/clojure/core.async) facilitates asynchronous programming in Clojure. Through this library, we can use asynchronous constructs that run on both the JVM and web browsers without dealing with how they are scheduled for execution on low-level threads. This library is an implementation of the theory in the paper Communicating Sequential Processes (CSPs), originally published in the late '70s by C. A. R. Hoare. The bottom line of CSPs is that any system that processes some input and provides an output can be comprised of smaller subsystems, and each subsystem can be defined in terms of processes and queues. A queue simply buffers data, and a process can read from and write to several queues. Here, we shouldn't confuse the term process with an operating system process. In the context of CSPs, a process is simply a sequence of instructions that interacts with some data stored in queues. Several processes may exist in a given...