Concurrency vs parallelism — they are not synonyms
Concurrency is about structure: a program is concurrent if it has multiple independent tasks that can overlap in time. Parallelism is about execution: tasks that literally run simultaneously on different hardware threads.
A single-core CPU can run concurrent code (time-sliced), but it cannot run parallel code. A four-core machine can do both. The distinction matters because:
- A concurrent, non-parallel program (Node.js event loop, Python asyncio) has no true simultaneous execution — but it still has coordination complexity.
- A parallel program does run multiple instruction streams at once, which forces you to reason about cache lines, memory ordering, and torn reads.
Rule of thumb: concurrency is a design property; parallelism is a runtime property. Almost all bugs discussed in this cursus are concurrency bugs — they arise from structure, not hardware count.
