Читайте (скользил достаточно для получения кодирования) посредством Программирования Erlang и Программирования Erlang.
Один вопрос, который так прост, как это звучит:
Если у Вас есть процесс Pid1
на машине m1
и миллиард миллионов сообщений отправляется в Pid1
, сообщения, обработанные параллельно тем процессом (я получаю впечатление не), и (ответил ниже),
есть ли гарантия порядка при обработке сообщений? т.е. Полученный в отправленном заказе? Если так, как расфазировка тактовых сигналов обрабатывается в ситуациях с интенсивным трафиком для упорядочивания?
Происхождение из целой среды Пулов/Общего состояния C/Thread... Я хочу получить этот бетон. Я понимаю распределение приложения, но хочу удостовериться, что 'необработанные кости' то, что я ожидаю прежде, чем создать процессы и распределить рабочую нагрузку.
Кроме того, я исправляюсь в размышлении, что целый мир в настоящее время просматривает тексты Erlang ;)
Если процесс A отправляет два сообщения процессу B, то два сообщения гарантированно прибудут в том порядке, в котором они были отправлены.
Если процесс A отправляет сообщение процессу B, а затем сообщение процессу C, нет никакой гарантии относительно порядка их получения.
Точно так же, если процессы A и B отправляют сообщения C, нет никакой гарантии относительно порядка, в котором сообщения получены.
Это фундаментальное свойство модели передачи сообщений - порядок вычислений в различных процессах не определен, вы можете осмысленно говорить о порядке только там, где участвует отправка сообщения. Одним из следствий приведенных выше правил является то, что если A отправляет сообщение C, затем сообщение B, и по получении сообщения B отправляет C, то C может получить два сообщения в любом порядке. (На практике я подозреваю, что это никогда не отменяется на одном узле, но может легко произойти, если три процесса находятся на разных узлах.)
Сообщения не обрабатываются параллельно; В конце концов, это всего лишь один процесс.
Что касается упорядочивания сообщений: очередь сообщений сканируется в "временном порядке" (от самого старого к самому новому). Я думаю Я вспоминаю обсуждение списка рассылки давным-давно, когда кто-то пояснил, что метка времени - это метка времени отправления сообщения (то есть время, когда оно было отправлено), но я тоже не могу вспомнить ясно, и я не могу найти никаких ссылок на это в Интернете.
Обратите внимание, что ваш оператор receive
может выполнять сопоставление в заголовке очереди входящих сообщений, что, конечно, позволяет получателю отбирать входящие сообщения вне (временного) порядка.
Согласно справочному руководству Erlang :
[Recieve] получает сообщения, отправленные процессу {{ 1}} с помощью оператора отправки (!). Шаблоны Шаблон последовательно сопоставляются с первым сообщением в временном порядке в почтовом ящике, затем со вторым и так далее.
Сообщения обрабатываются последовательно для каждого процесса.