concurrency computer science for a more practical discussion see concurrent computing the dining philosophers a classic problem involving concurrency and shared resources in computer science concurrency refers to the ability of different parts or units of a program algorithm or problem to be executed outoforder or in partial order without affecting the final outcome this allows for parallel execution of the concurrent units which can significantly improve overall speed of the execution in multiprocessor and multicore systems in more technical terms concurrency refers to the decomposability property of a program algorithm or problem into orderindependent or partiallyordered components or units a number of mathematical models have been developed for general concurrent computation including petri nets process calculi the parallel randomaccess machine model the actor model and the reo coordination language history as leslie lamport 2015 notes while concurrent program execution had been considered for years the computer science of concurrency began with edsger dijkstras seminal 1965 paper that introduced the mutual exclusion problem the ensuing decades have seen a huge growth of interest in concurrencyparticularly in distributed systems looking back at the origins of the field what stands out is the fundamental role played by edsger dijkstra issues because computations in a concurrent system can interact with each other while being executed the number of possible execution paths in the system can be extremely large and the resulting outcome can be indeterminate concurrent use of shared resources can be a source of indeterminacy leading to issues such as deadlocks and resource starvation design of concurrent systems often entails finding reliable techniques for coordinating their execution data exchange memory allocation and execution scheduling to minimize response time and maximise throughput theory concurrency theory has been an active field of research in theoretical computer science one of the first proposals was carl adam petris seminal work on petri nets in the early 1960s in the years since a wide variety of formalisms have been developed for modeling and reasoning about concurrency models a number of formalisms for modeling and understanding concurrent systems have been developed including the parallel randomaccess machine the actor model computational bridging models such as the bulk synchronous parallel bsp model petri nets process calculi communicating sequential processes csp model tuple spaces eg linda simple concurrent objectoriented programming scoop reo coordination language some of these models of concurrency are primarily intended to support reasoning and specification while others can be used through the entire development cycle including design implementation proof testing and simulation of concurrent systems some of these are based on message passing while others have different mechanisms for concurrency the proliferation of different models of concurrency has motivated some researchers to develop ways to unify these different theoretical models for example lee and sangiovannivincentelli have demonstrated that a socalled taggedsignal model can be used to provide a common framework for defining the denotational semantics of a variety of different models of concurrency the concurrency representation theorem in the actor model provides a fairly general way to represent concurrent systems that are closed in the sense that they do not receive communications from outside other concurrency systems eg process calculi can be modeled in the actor model using a twophase commit protocol denotes i progressionsis in this way s can be mathematically characterized in terms of all its possible behaviors logics various types of temporal logic practice concurrent programming encompasses programming languages and algorithms used to implement concurrent systems concurrent programming is usually considered to be more general than parallel programming because it can involve arbitrary and dynamic patterns of communication and interaction whereas parallel systems generally have a predefined and wellstructured communications pattern the base goals of concurrent programming include correctness performance and robustness concurrent systems such as operating systems and database management systems are generally designed to operate indefinitely including automatic recovery from failure and not terminate unexpectedly see concurrency control some concurrent systems implement a form of transparent concurrency in which concurrent computational entities may compete for and share a single resource but the complexities of this competition and sharing are shielded from the programmer because they use shared resources concurrent systems in general require the inclusion of some kind of arbiter somewhere in their implementation often in the underlying hardware to control access to those resources the use of arbiters introduces the possibility of indeterminacy in concurrent computation which has major implications for practice including correctness and performance for example arbitration introduces unbounded nondeterminism which raises issues with model checking because it causes explosion in the state space and can even cause models to have an infinite number of states some concurrent programming models include coprocesses and deterministic concurrency in these models threads of control explicitly yield their timeslices either to the system or to another process clientserver network nodes clojure cluster nodes concurrency control concurrent computing concurrent objectoriented programming concurrency pattern chu space distributed systemnodes go programming language rust programming language elixir programming language gordon pask opening open korg tmp parallel computing partitioned global address space processes ptolemy project sheaf mathematics threads x10 programming language lynch nancy a 1996 distributed algorithms morgan kaufmann isbn1558603484 tanenbaum andrew s van steen maarten 2002 distributed systems principles and paradigms prentice hall isbn0130888931 kurkisuonio reino 2005 a practical theory of reactive systems springer isbn3540233423 garg vijay k 2002 elements of distributed computing wileyieee press isbn0471036005 magee jeff kramer jeff 2006 concurrency state models and java programming wiley isbn0470093552 distefano s bruneo d 2015 quantitative assessments of distributed systems methodologies and techniques 1st ed somerset john wiley sons incisbn9781119131144 bhattacharyya s s 20132014 handbook of signal processing systems second22nd 2013 ed new york ny springer1010079781461468592 isbn9781461468592 wolter k 20122014 resilience assessment and evaluation of computing systems 1 aufl1 ed londonberlin springer isbn9783642290329 concurrent systems at the www virtual library concurrency patterns presentation given at scaleconf 