Под капотом Erlang VM использует неблокирующий ввод-вывод. Если вы используете легковесные блоки процесса Erlang, виртуальная машина не выполняет переключение контекста потока на уровне ядра. В большинстве случаев он просто пробуждает другой LWP в том же потоке ОС (таким образом, это не «блокировка» в правильном смысле этого слова).
Вы даже можете запустить vm, используя аргумент + A, и указать, сколько потоков цикла событий ввода-вывода вы хотели бы выделить (AFAIK, Node.js по-прежнему однопоточный, и если функция обратного вызова зависает, ваша виртуальная машина готова для )