In the previous chapter, it was alluded to that
core.async operates at a lower level of abstraction when compared to other frameworks such as RxClojure or RxJava.
This is because most of the time we have to think carefully about the channels we are creating as well as what types and sizes of buffers to use, whether we need pub/sub functionality, and so on.
Not all applications require such level of control, however. Now that we are familiar with the motivations and main abstractions of
core.async we can embark into writing a minimal CES framework using
core.async as the underlying foundation.
By doing so, we avoid having to think about thread pool management as the framework takes care of ...