The absence of side effects means that we can parallelize our software programs.
The technical term for memory areas that can be modified is mutable state. Erlang is a functional programming language and has immutable state.
If you use a conventional programming language such as C or Java to program a multicore CPU, then you will have to contend with the problem of shared memory.
In order not to corrupt shared memory, the memory has to be locked while it is accessed. Programs that access shared memory must not crash while they are manipulating the shared memory.
In Erlang, there is no mutable state, there is no shared memory, and there are no locks. This makes it easy to parallelize our programs.
Programming Erlang (2nd edition)
by Joe Armstrong