Ошибочно думать о параллелизме только как о силе перемалывания чисел. Эрланг ближе к работе кластерного компьютера, чем, скажем, графический процессор или классический суперкомпьютер.
В современных графических процессорах и суперкомпьютерах старого стиля производительность сводится к векторизованной арифметике, специальному вычислительному оборудованию и связи с малой задержкой между процессорами. Поскольку задержка связи низкая, а каждый отдельный вычислительный блок работает очень быстро, идеальным вариантом использования является загрузка оперативной памяти компьютера данными и одновременное сжатие всей памяти. Эта обработка может включать в себя множество данных, передаваемых между узлами, как это происходит при обработке изображений или 3D, где существует множество задач, связанных с ЦП, для преобразования данных из формы ввода в форму вывода. Этот тип машины является плохим выбором, когда вам часто приходится обращаться к диску, сети или другому медленному каналу ввода-вывода для получения данных. Это простаивает по крайней мере один дорогой специализированный процессор и, вероятно, также блокирует конвейер обработки данных, поэтому ничего больше не делается.
Если ваша программа требует интенсивного использования медленных каналов ввода / вывода, лучшим типом машины является тот, на котором есть много дешевых независимых процессоров, например кластер. Вы можете запустить Erlang на одном компьютере, и в этом случае вы получите что-то вроде кластера на этом компьютере, или вы можете легко запустить его на реальном аппаратном кластере, и в этом случае у вас есть кластер кластеров. Здесь накладные расходы на связь по-прежнему простаивают процессорные блоки, но поскольку на каждом бите вычислительного оборудования работает много процессорных блоков, Erlang может мгновенно переключиться на один из других процессов. Если случается, что целая машина находится в ожидании ввода-вывода, у вас все еще есть другие узлы в аппаратном кластере, которые могут работать независимо. Эта модель выходит из строя только тогда, когда накладные расходы на связь настолько высоки, что каждый узел ожидает на каком-то другом узле, или для общего ввода-вывода, и в этом случае вам нужно либо более быстрый ввод-вывод, либо большее количество узлов, оба из которых, естественно, использует Erlang из.
Системы связи и управления являются идеальными приложениями Erlang, потому что каждая отдельная задача обработки требует небольшого количества ресурсов ЦП и нуждается лишь в связи с другими узлами обработки. Большую часть времени каждый процесс работает независимо, каждый из которых занимает крошечную долю мощности процессора. Самая важная вещь здесь - способность эффективно справиться со многими тысячами из них.
Классический случай, когда вам абсолютно необходим классический суперкомпьютер, - это прогноз погоды. Здесь вы разделяете атмосферу на кубы и выполняете физическое моделирование, чтобы выяснить, что происходит в каждом кубе, но вы не можете использовать кластер, потому что воздух перемещается между каждым кубом, поэтому каждый куб постоянно взаимодействует со своими 6 соседними соседями. (Воздух не проходит через края или углы куба, так как он бесконечно хорош, поэтому он не общается с другими 20 соседними кубами.) Запустите это на кластере, будь то запуск Erlang на нем или какой-либо другой системе, и он мгновенно становится связанным с вводом / выводом.