Concurrency

Concurrency is the practice of structuring a program as several independently executing parts — threads, processes, goroutines, or asynchronous tasks — that can each make progress on their own. It is distinct from parallelism, which is about those parts literally running at the same time on multiple processors; a concurrent program is organized so that independent work is separated, whether or not the hardware runs it simultaneously.

A foundational treatment is C. A. R. Hoare’s 1978 paper “Communicating Sequential Processes,” published in Communications of the ACM. Hoare proposed that input and output should be treated as basic programming primitives and that programs could be built by composing sequential processes that communicate by passing messages, rather than by sharing and locking memory. This model, known as CSP, became one of the most influential ways of thinking about concurrent computation.

Go is a prominent modern language built around these ideas. Its concurrent parts, called goroutines, are started with the go keyword and communicate over channels. The Go documentation states that “although Go’s approach to concurrency originates in Hoare’s Communicating Sequential Processes (CSP), it can also be seen as a type-safe generalization of Unix pipes.”

The guiding principle Go offers for this style is captured in a single line from its own documentation: “do not communicate by sharing memory; instead, share memory by communicating.” That advice — coordinate through messages rather than shared mutable state — traces a direct line from Hoare’s CSP to the concurrency tools used in everyday systems programming today.

Sources

Last verified June 7, 2026