Concurrency vs. Parallelism Distinction¶
Concurrency is about structuring a program to handle multiple things at once (composition of independently executing processes); parallelism is about executing multiple things simultaneously for speed. Concurrency is a design concern; parallelism is an execution concern.
Tension Addressed¶
Simplicity vs. Scalability
Recognizable As¶
Code structured with multiple logical threads of control (concurrent) vs. code leveraging multiple CPU cores for throughput (parallel). A single-core machine can run concurrent code; parallelism requires multiple execution units.
Canonical Sources¶
Rob Pike, "Concurrency Is Not Parallelism" (2012); Hoare, "Communicating Sequential Processes" (1978)
Transfers To¶
Distributed systems (nodes vs. simultaneous execution), UI programming (event handling vs. background work), operating systems (multiprogramming vs. multiprocessing)
This distinction matters because you can write concurrent code that never runs in parallel (single-threaded event loops), and parallel code that isn't designed concurrently (data parallelism on arrays). Conflating them leads to poor design choices.