Jump to content

Concurrent programming language

From Wikipedia, the free encyclopedia
This is an old revision of this page, as edited by Pavel Vozenilek (talk | contribs) at 19:13, 16 July 2005 (Examples: some details to Erlang). The present address (URL) is a permanent link to this revision, which may differ significantly from the current revision.

Concurrent programming languages are programming languages that use language constructs for concurrency. These constructs involve multi-threading, operating systems and networking using shared resources that can change.

Communication in concurrent programming languages can essentially be divided into two classes:

  1. Shared-memory communication, in which threads communicate by changing shared memory locations. This style of concurrent programming usually requires the application of some form of locking (e.g. mutexes, semaphores, or monitors) to coordinate between threads.
  2. Message-passing communication, in which messages are sent to recipients as in the Actor model and Process calculi. Message-passing concurrency tends to be far easier to reason about than shared-memory concurrency, and is typically considered a more robust form of concurrent programming. Messages can be asynchronous (aka "send, pray, and if no acknowledgment send again"), as packets on the Internet, or may use a rendezvous style in which the sender blocks until the message is received, as in TCP on the Internet and synchronous process calculi.

The Java and C# programming languages make use of both of the above kinds of communcication, e.g., see the locking programming language constructs in both languages.

Examples

Note that many of these languages are intended more as research languages (e.g. Pict) than as languages for production use. However, several of the examples (such as Ada, Erlang, Java, Limbo, and Occam) have seen widespread industrial use at various times in the last 20 years.