Concurrency Models
· One min read
- Single-threaded - Callbacks, Promises, Observables and async/await: vanilla JS
- threading/multiprocessing, lock-based concurrency
- protecting critical section vs. performance
- Communicating Sequential Processes (CSP)
- Golang or Clojure’s
core.async
. - process/thread passes data through channels.
- Golang or Clojure’s
- Actor Model (AM): Elixir, Erlang, Scala
- asynchronous by nature, and have location transparency that spans runtimes and machines - if you have a reference (Akka) or PID (Erlang) of an actor, you can message it via mailboxes.
- powerful fault tolerance by organizing actors into a supervision hierarchy, and you can handle failures at its exact level of hierarchy.
- Software Transactional Memory (STM): Clojure, Haskell
- like MVCC or pure functions: commit / abort / retry