Being multi-threaded is a relatively recent thing for Erlang. And IIRC, it only starts enough of them to cover all the system cores.
It has preemptive multitasking for its "processes", but seeing as how those are all in the same Unix process, and time is allocated to them via Erlang's own virtual machine, calling out to something in C that blocks would be a problem for Erlang.
Erlang, at a basic level, is event based, and this kind of protection is necessary.