Concurrency terms
Writing code that does multiple things at once — correctly — is one of the hardest problems in software engineering. This category covers threads, processes, async/await, event loops, locks, race conditions, deadlocks, and the concurrency models used in modern languages and runtimes. Getting concurrency wrong is subtle; these terms help you get it right.
More on Concurrency
History
Concurrency emerged as a critical concern in the 1960s with the advent of multiprogramming and multitasking operating systems, where a single processor needed to manage multiple tasks seemingly simultaneously. Early approaches relied on locks and semaphores, formalized by Dijkstra and others, to prevent race conditions and coordinate resource access. The rise of multicore processors in the 2000s transformed concurrency from an optional optimization into a necessity for performance, spurring language-level abstractions like goroutines (Go), async/await (JavaScript, Python, C#), and the actor model (Akka, Erlang). Modern practice has shifted from low-level thread management toward higher-level patterns—event loops, lock-free algorithms, and message passing—that reduce cognitive overhead and improve safety. Today, concurrency is foundational to systems design, from web servers and microservices to real-time applications, with ongoing research into better tooling for reasoning about correctness and preventing subtle bugs like data races and deadlocks.
Key concepts
- Concurrency vs Parallelism
- Processes vs Threads
- Race Condition
- Mutex & Locking
- Deadlock
- Atomic Operations
- Thread Safety
- Memory Barriers & Visibility
Best references
-
Java Concurrency in Practice Definitive guide by Goetz et al. on concurrent programming principles, thread safety, and practical patterns; concepts transfer directly to other languages and frameworks.
-
POSIX Threads Programming (Butenhof) Authoritative reference on POSIX thread semantics, mutexes, condition variables, and memory visibility—foundational for understanding OS-level concurrency abstractions.
-
The Go Memory Model Official specification defining memory visibility and synchronization guarantees in Go; illustrates modern concurrency semantics and goroutine interaction patterns.
-
Designing Data-Intensive Applications (Kleppmann) Comprehensive coverage of distributed concurrency concepts including consistency models, consensus algorithms, and real-world trade-offs in concurrent systems.
Typed relationships here
Edges touching a Concurrency term.
- MySQL Connection Pooling Specializes Database Connection Pooling 4d
- Lock-Free Programming Leverages Compare-and-Swap (CAS) 6d
- Semaphore Often seen in Database Connection Pooling Jun 12
- Semaphore Enables Deadlock Jun 11
- Pessimistic Locking Leverages Mutex & Locking Jun 11