Dutch Inventions Codexery

Concurrent programming

A computing paradigm where processes execute during overlapping time periods.

Concurrent programming is a paradigm of computing in which several computations are executed concurrently—during overlapping time periods—rather than sequentially. It is a form of modular programming where an overall computation is factored into subcomputations that may be executed concurrently, and is a property of a system where there is a separate execution point or thread of control for each process. Pioneers in the field include Edsger Dijkstra, Per Brinch Hansen, and C.A.R. Hoare.

field
Computer science
known_for
Concurrent computing paradigm, concurrency control, and models such as Petri nets, process calculi, and sequential consistency
pioneers
Edsger Dijkstra, Per Brinch Hansen, C.A.R. Hoare

Lore & Background

Concurrent computing developed out of earlier work on railroads and telegraphy from the 19th and early 20th century, and some terms date to this period. Introduced in 1962, Petri nets were an early attempt to codify the rules of concurrent execution. Dataflow theory later built upon these, and Dataflow architectures were created to physically implement the ideas of dataflow theory. Beginning in the late 1970s, process calculi such as Calculus of Communicating Systems (CCS) and Communicating Sequential Processes (CSP) were developed to permit algebraic reasoning about systems composed of interacting components. The π-calculus added the capability for reasoning about dynamic topologies. Input/output automata were introduced in 1987. Logics such as Lamport's TLA+, and mathematical models such as traces and Actor event diagrams, have also been developed to describe the behavior of concurrent systems. Software transactional memory borrows from database theory the concept of atomic transactions and applies them to memory accesses.

Reader's Guide

Concurrent programming is significant because it enables modeling of processes that happen concurrently, such as multiple clients accessing a server at the same time, and structuring software systems as composed of multiple concurrent, communicating parts can be useful for tackling complexity. The main challenge in designing concurrent programs is concurrency control: ensuring correct sequencing of interactions and coordinating access to shared resources. Potential problems include race conditions, deadlocks, and resource starvation. Advantages include increased program throughput via parallel execution according to Gustafson's law, high responsiveness for input/output-intensive programs, and more appropriate program structure for certain problem domains. Concurrent programming languages and multiprocessor programs must have a consistency model, such as Leslie Lamport's sequential consistency model. Implementation methods include using operating system processes or threads. Communication between concurrent components can be via shared memory (requiring locking mechanisms like mutexes, semaphores, or monitors) or message passing (exemplified by MPI, Go, Scala, Erlang, and occam), with message-passing concurrency typically considered more robust and easier to reason about.

Did You Know?

More in Dutch inventions 1-24

Spotted an error? Know more?

This is a living reference — every entry is fact-audited, and reader corrections feed straight into our audit queue. Suggest an edit · See this site's audit record

Comments

Loading…
Open in the interactive codex →