Подтвердить что ты не робот

Как Erlang передает сообщения между процессами на одном и том же node?

Между узлами сообщение (должно быть) передано через TCP/IP. Однако каким механизмом они передаются между процессами, запущенными на одном и том же node? Используется ли TCP/IP в этом случае? Unix доменные сокеты? В чем разница в производительности между сообщениями "внутри node" и "между node"?

4b9b3361

Ответ 1

каким механизмом они передаются между процессами, запущенными на одном и том же node?

Поскольку процессы Erlang на одном и том же node все работают в одном собственном процессе -— эмулятор BEAM — структуры сообщений просто копируются в очередь сообщений получателя. Структура сообщений скопирована, а не просто указана, для всех стандартных причин функционального программирования без побочных эффектов.

Подробнее см. erts_send_message() в erts/emulator/beam/erl_message.c в источниках Erlang. В R15B01 биты, наиболее релевантные вашему вопросу, начинаются со строки 980 или около того с вызовом erts_queue_message().

Если вы решили запустить несколько эмуляторов BEAM на одной физической машине, я бы предположил, что сообщения отправляются между ними так же, как между разными физическими машинами. Вероятно, нет веских оснований для этого, поскольку BEAM имеет хорошую поддержку SMP.

В чем разница между производительностью между сообщением "внутри node" и "между node"?

Простой критерий для вашего реального оборудования был бы более полезен для вас, чем анекдотические данные других.

Если вы хотите, чтобы в общих чертах наблюдались полосы пропускания памяти, около 20 ГБ/сек в эти дни, и что вы вряд ли будете иметь сетевая связь быстрее, чем 10 Гбит/с между узлами. Это означает, что, хотя может быть много различий между вашим фактическим приложением и любым простым эталоном, который вы выполняете или находите, эти различия, вероятно, не могут взлететь на порядок величины в скорости передачи.

Если у вас "только" есть сквозная сетевая связь 1 Гбит/с между узлами, переносы внутри очереди, вероятно, будут на два порядка быстрее, чем межсетевые передачи.