In the book about Communicating Sequential Processes a lot of time is spent defining events, which have no direction and can involve multiple independent processes.
Only in chapter 4 are channels introduced, which are directed and involve 2 processes.
Yet all implementations of CSP including occam, Go, LuaCSP and clojure.core.async only implement channels.
Even though most practical problems can be solved with (broadcast) channels, I wonder why the book spends so much time on them while nobody uses them.