
Communicating sequential processes
by C. A. R. Hoare · first published 1985
73mentions
25recommended by
63HN commenters
2009–2026first – last mentioned
40% recommend60% neutral
Why HN recommends it
Compact, lucid foundation for reasoning about concurrency through communicating processes and traces. Recommended for anyone wanting the mental model behind Go channels, Erlang and occam, beyond async/await.
Summarised by Claude from recommending comments
A landmark book describing a process algebra (Communicating Sequential Processes, or CSP) for designing algorithms that exploit concurrency and communication.
Affiliate links. As an Amazon Associate I earn from qualifying purchases.






…(idem) [8] Charles Antony Richard Hoare 1974. "Monitors: An operating system structuring concept". (an early refinement of a very influential concurrency concept) [9] Charles Antony Richard Hoare 1979. Communicating sequential processes (an early presentation of invariants for state machines) [10] deleted [11] Gilles Kahn and David B. MacQueen 1977. "Coroutines and networks of parallel processes" (non preemptive concurrency, an alternative…
on “Ask HN: CS papers for software architecture and design?” ↗I think Communicating Sequential Processes [0] by Hoare is another landmark paper that should be on this list for its perspective on organizing concurrent processes. This was actually required reading for the concurrency section of my undergrad…
on “Technical Papers Every Programmer Should Read at Least Twice (2011)” ↗Somewhat varied but I think some of these may fit your criteria. Programming Erlang by Joe Armstrong Communicating Sequential Processes by Hoare The algorithmic beauty of plants by Prusinkiewicz, Lindenmayer Network Performance Analysis Using the J Programming Language by Alan Holt Relational Programming in miniKanren by William Byrd…
on “Ask HN: Most interesting, mildly impractical, well-written books on software?” ↗Oh yes. Grad school is all reading. I recall reading these books in their entirety. Security Engineering. Ross Anderson The Formal Semantics of Programming Languages. Glynn Wynskell. Communicating Sequential Processes. Tony Hoare. This book is surprising in its compactness and lucidity. Pi Calculus. Robin Milner. Semantics With Applications. Hanne Riis Nielson On Concurrent Programming. Fred Schneider. Specifying…
on “Structure and Interpretation of Computer Programs (1996) [pdf]” ↗I loved these puzzles. I was reminded of the famous book by Tony Hoare "Communicating Sequential Processes". In that book, he describes the trace of a parallel program as all possible interleaving of the traces of the individual programs
on “The Deadlock Empire” ↗The original paper "Communicating Sequential Processes" by Tony Hoare is a good read https://www.cs.cmu.edu/~crary/819-f09/Hoare78.pdf Both Erlang and Go use this model. As @duped stated, Rust uses a different model
on “Ask HN: Goroutines in Rust?” ↗…compute them does not matter - that is concurrency. If your language has means of expressing "compute these things, i dont care about the order", then your language supports concurrency. I suggest reading Communicating Sequential Processes by Tony Hoare. It is a very influential work on concurrency - and the proof of its influence is the design of the Go programming language.
on “What is parallelism, anyhow? (2009)” ↗There's a great old book on this if someone wants to check it: Communicating Sequential Processes. From Hoare. Go channels and the concurrent approach was inspired on this. I also wrote a blog post a while back when I did a talk at work, it's Go focused but still worth the read I think. [0] https://bognov.tech/communicating-sequential-processes-in-go...
on “Asynchrony is not concurrency” ↗I wrote both my master thesis and PhD on Hoare's Communicating Sequential Processes. I really enjoyed it's simplicity, expandability, and was always amazed that it inspired and influenced language constructs in Go, Erlang, occam and the likes.
on “Turing Award winner and former Oxford professor Tony Hoare passed away” ↗Communicating Sequential Processes, by CAR Hoare.
on “Good introductions to concurrent programming?” ↗Is there a specific aspect of it you want to understand? My recommendation to younger colleagues has been: Learn Go and Erlang. Go implements (basically) communicating sequential processes. If you want to know more from a theory side, you can read C.A.R. Hoare's book on the topic [0]. Erlang uses the actor model and message passing. There are many similarities but enough differences that you can
on “Level Up Your Concurrency Skills with Rust [video]” ↗You are not. Strong opinion- async/await as function-level/programmer-exposed abstractions is broken. From a mental model perspective, I would recommend Communicating Sequential Processes - https://en.m.wikipedia.org/wiki/Communicating_sequential_pro... - and see Golang's channels and goroutines as a pretty good surface. Clojure also has this surface in the core.async library. CSP is…
on “Show HN: Parallelise pipelines of Python async iterables” ↗It's easy with CSP http://www.usingcsp.com/ Esp. if your language has primitives for it e.g. Erlang, Limbo, Go Or C libs e.g Plan9, libtask
This topic on StackOverflow: http://stackoverflow.com/questions/194812/list-of-freely-ava... The Smalltalk library linked from that page: http://stephane.ducasse.free.fr/FreeBooks.html O'Reilly open books: http://oreilly.com/openbook/ Some FP books (Ocaml, Scala, Haskell,...): http://news.ycombinator.com/item?id=1088594 Scheme: "An introduction to Scheme and its implementation." ftp://ftp.cs.
on “Ask HN: Free Programming eBooks” ↗Tony Hoare’s paper is one of the most amazing papers i read (not that i understood all of it). You can get it at http://www.usingcsp.com/
on “Visualizing Concurrency in Go (2016)” ↗