There are many ways to implement parallel programming in Elixir. Depending on the use case we can choose that fit to our suit. The fundamental architecture of the language lends itself perfectly to the modern CPUs that are on every PC and mobile device which is basically omni channel.
Concurrency
Since 30 years Elixir has been with us and was built well before multi-core CPUs existed. Still it’s a language that can’t be more suitable and consistent in the present scenario! The fundamental architecture of the language lends itself perfectly to the modern CPUs that are on every PC and mobile device which is basically omni channel.
One of the USP of Elixir is its support for concurrency. Great salute to the Erlang VM (BEAM), concurrency in Elixir is much easier than anticipated. The parallel model relies on Actors, a contained process that communicates with other processes through message passing. In Erlang, and therefor Elixir which manipulates the Erlang VM (BEAM), it makes writing and reasoning about concurrent code feel effortless. While Ruby has some great libraries for helping write concurrent code, with built-in and a first-class citizen Elixir is one in the class in Industry.,
Genservers
Genservers are low level Module, which is implemented in Erlang. We can create and control a process using this module. We can track a process with its PID number.
It requires some experience to learn and use this Module properly in Elixir. The other common way for parallel programming in Elixir are Tasks, Flow, etc. which is also built using Genservers.
Flow
It is a High level Module, which is implemented in Elixir built using the Genservers. Here the programmer will don’t have to track a process. By using Flow library a programmer can write parallel programming easily. The Flow syntax is partially similar to the reduce function in the Enum module. There are many customization options available for using the Flow.
Advantages of Flow over multi-thread concepts in other language
- Easy to maintain the code that wrote in Flow.
- Easy to return the processed result as a list or to any type.
- Programmers can specify how much process can run to triggering an event.
- We can keep track of the count value for the processed data with ETS.
- Write few code and let the Flow control every state of your processes.
- Flow can also use to process streamed data and can return its result periodically.