Cover of Communicating sequential processes

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.

Mentions per year

70 2007: 0 mentions2008: 0 mentions2009: 2 mentions2010: 3 mentions2011: 0 mentions2012: 1 mention2013: 7 mentions2014: 3 mentions2015: 5 mentions2016: 4 mentions2017: 7 mentions2018: 2 mentions2019: 5 mentions2020: 6 mentions2021: 3 mentions2022: 4 mentions2023: 4 mentions2024: 3 mentions2025: 3 mentions2026: 7 mentions200720172026

What Hacker News says

  • charlysl · Nov 25, 2017 · Recommends

    …(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?” ↗
  • frakkingcylons · Dec 20, 2014 · Recommends

    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)” ↗
  • thoughtFrame · Nov 22, 2021 · Recommends

    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?” ↗
  • sriram_malhar · Oct 20, 2019 · Recommends

    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]” ↗
  • 2sk21 · Dec 3, 2021 · Recommends

    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” ↗
  • verdverm · May 4, 2022 · Recommends

    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?” ↗
  • paskozdilar · May 8, 2022 · Recommends

    …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)” ↗
  • tekbog · Jul 18, 2025 · Recommends

    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” ↗
  • madsohm · Mar 10, 2026 · Recommends

    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” ↗
  • db48x · Dec 30, 2018 · Recommends

    Communicating Sequential Processes, by CAR Hoare.

    on “Good introductions to concurrent programming?” ↗
  • Jtsummers · Oct 3, 2017 · Recommends

    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]” ↗
  • jonahbenton · Sep 6, 2020 · Recommends

    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” ↗
  • wendroid · Mar 5, 2010 · Recommends

    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

  • Fixnum · May 7, 2010 · Recommends

    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” ↗
  • gens · Apr 29, 2017 · Recommends

    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)” ↗

Keyboard shortcuts

/
Focus search
j / k
Next / previous book
Enter
Open focused book
Esc
Close / go back
g h
Go to Home
g t
Go to Top all-time
g m
Go to Most recommended
g r
Go to Rising
g f
Go to For You
?
Show this help