This was a big chapter and we covered a lot of material. We started our discussion around the importance of concurrency constructs to be available in our languages to better utilize the current processors in the market and then we started deep into the process structure of the runtime and how we can use Elixir to create processes. We covered parallel computation versus concurrent computation, Erlang processes versus OS processes, actor-model, sending and receiving messages in Elixir, and spawning, linking, and monitoring processes in Elixir.
Finally, we covered a number of examples that use Elixir processes.
There's a lot of interesting things we can do with Erlang/Elixir processes and the concurrency they enable. However, there are a lot of disadvantages of using them in their raw form. As you might have noticed, we have duplicated a lot of work throughout the examples. We wrote a lot of similar functions for spawning the processes, the receive loops, message delivery failure, and...