Concurrent Haskell

del.icio.us del.icio.us
Digg Digg
Furl Furl
Reddit Reddit
Rojo Rojo
Add to OnlyWire

Concurrent Haskell extends[1] Haskell 98 with explicit concurrency. The two main concepts underpinning Concurrent Haskell are:

  • A primitive type MVar α implementing a bounded/single-place asynchronous channel, which is either empty or holds a value of type α.
  • The ability to spawn a concurrent thread via the forkIO primitive.

Built atop this is a collection of useful concurrency and synchronisation abstractions[2] such as unbounded channels, semaphores and sample variables.

Default Haskell threads have very low overheads: creation, context-switching and scheduling are all internal to the Haskell runtime. Fully-fledged operating system processes are nevertheless available through the forkOS primitive on supported architecture and operating system combinations.

Software Transactional Memory

The recently introduced Software Transactional Memory (STM)[3] extension[4] to the Glasgow Haskell Compiler reuses the process forking primitives of Concurrent Haskell. STM however:

  • eschews MVars in favour of TVars.
  • introduces the retry and orElse primitives, allowing alternative atomic actions to be composed together.

References:

  1. ^ Simon Peyton Jones, Andrew Gordon, and Sigbjorn Finne. Concurrent Haskell. ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages (PoPL). 1996. (Some sections are out of date with respect to the current implementation.)
  2. ^ The Haskell Hierarchical Libraries, Control.Concurrent
  3. ^ Tim Harris, Simon Marlow, Simon Peyton Jones, and Maurice Herlihy. Composable Memory Transactions. ACM Conference on Principles and Practice of Parallel Programming 2005 (PPoPP'05). 2005.
  4. ^ Control.Concurrent.STM


This article is from Wikipedia. All text is available under the terms of the GNU Free Documentation License.


Giant Panda

Mercedes Car
James Bond Guide
This site monitored by SitePinger.net