5 Concurrency primitives
This chapter covers
- Understanding BEAM concurrency principles
- Working with processes
- Working with stateful server processes
- Runtime considerations
Now that you have sufficient knowledge of Elixir and functional programming idioms, we’ll turn our attention to the Erlang platform. We’ll spend some time exploring BEAM concurrency, a feature that plays a central role in Elixir’s and Erlang’s support for scalability, fault-tolerance, and distribution.
In this chapter, we’ll start our tour of BEAM concurrency by looking at basic techniques and tools. Before we explore the lower-level details, we’ll take a look at higher-level principles.
5.1 Concurrency in BEAM
Erlang is all about writing highly available systems — systems that run forever and are always able to meaningfully respond to client requests. To make your system highly available, you have to tackle the following challenges:
- Fault-tolerance — Minimize, isolate, and recover from the effects of runtime errors.
- Scalability — Handle a load increase by adding more hardware resources without changing or redeploying the code.
- Distribution — Run your system on multiple machines so that others can take over if one machine crashes.