Concurrent programming
Published:
Concurrent programming is a form of modular programming, namely factoring an overall computation into subcomputations that may be executed concurrently (not sequentially, overlapping time periods. So a concurrent programming is the paradigm of programming that allows you to use concurrent computation.
As a computation paradigm, concurrent computing is a form of computing in which several computations are executed during overlapping time periods (concurrently) instead of sequentially. Pioneers in the field of concurrent computing include Edsger Dijkstra, Per Brinch Hansen, and C.A.R. Hoare. Concurrent computation is usually confused with parallel programming. Parallel programming allows the user to run code computations at the same physical time, but concurrent is that there are computing two distinct processes at the same time alternately (but probably swapping between one to other). So, concurrent computations can be computed in parallel but it is not needed.
Concurrent challenges are usually about managing shared resources and coordination between tasks.
There are language programming oriented to apply concurrency as:
- Join Java: concurrent, based on Java language
- JoCaml: concurrent and distributed channel based, extension of OCaml
- Alef: concurrent, with threads and message passing, for system programming
- Joyce: concurrent, teaching, built on Concurrent Pascal
- …
Or other general purpose languages that they include this paradigm:
- Java
- JavaScript
- Python
- Fortran (co-arrays)
- Go
- Ada
- C++ (std::thread)
- Scala
- …
See also
Material
- Concurrency is not Parallelism, Waza conference Jan 11, 2012, Rob Pike (slides)
- https://wiki.haskell.org/Parallelism_vs._Concurrency
Papers
- Dijkstra, E. W. (1965). Solution of a problem in concurrent programming control. Communications of the ACM 8 (9): 569
Books
- Taubenfeld, Gadi (2006). Synchronization Algorithms and Concurrent Programming. Pearson / Prentice Hall.
Thomas, Dave (2013). [Programming Elixir: Functional > Concurrent > Pragmatic > Fun](https://www.goodreads.com/book/show/17971957-programming-elixir). The Pragmatic Bookshelf - Milner, Robin (1995). Communication and Concurrency. Prentice Hall PTR
- Marlow, Simon (2013). Parallel and Concurrent Programming in Haskell: Techniques for Multicore and Multithreaded Programming. O’Reilly Media
- Ben-Ari, Mordechai (1982) Principles of Concurrent Programming. Prentice Hall
- Breshears, Clay. (2009). The Art of Concurrency: A Thread Monkey’s Guide to Writing Parallel Applications. O’Reilly Media