Порядок времени сообщений

Читайте (скользил достаточно для получения кодирования) посредством Программирования Erlang и Программирования Erlang.

Один вопрос, который так прост, как это звучит:

Если у Вас есть процесс Pid1 на машине m1 и миллиард миллионов сообщений отправляется в Pid1, сообщения, обработанные параллельно тем процессом (я получаю впечатление не), и (ответил ниже),

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

Происхождение из целой среды Пулов/Общего состояния C/Thread... Я хочу получить этот бетон. Я понимаю распределение приложения, но хочу удостовериться, что 'необработанные кости' то, что я ожидаю прежде, чем создать процессы и распределить рабочую нагрузку.

Кроме того, я исправляюсь в размышлении, что целый мир в настоящее время просматривает тексты Erlang ;)

5
задан Justin Johnson 18 March 2010 в 23:57
поделиться

3 ответа

Если процесс A отправляет два сообщения процессу B, то два сообщения гарантированно прибудут в том порядке, в котором они были отправлены.

Если процесс A отправляет сообщение процессу B, а затем сообщение процессу C, нет никакой гарантии относительно порядка их получения.

Точно так же, если процессы A и B отправляют сообщения C, нет никакой гарантии относительно порядка, в котором сообщения получены.

Это фундаментальное свойство модели передачи сообщений - порядок вычислений в различных процессах не определен, вы можете осмысленно говорить о порядке только там, где участвует отправка сообщения. Одним из следствий приведенных выше правил является то, что если A отправляет сообщение C, затем сообщение B, и по получении сообщения B отправляет C, то C может получить два сообщения в любом порядке. (На практике я подозреваю, что это никогда не отменяется на одном узле, но может легко произойти, если три процесса находятся на разных узлах.)

10
ответ дан 18 December 2019 в 14:44
поделиться

Сообщения не обрабатываются параллельно; В конце концов, это всего лишь один процесс.

Что касается упорядочивания сообщений: очередь сообщений сканируется в "временном порядке" (от самого старого к самому новому). Я думаю Я вспоминаю обсуждение списка рассылки давным-давно, когда кто-то пояснил, что метка времени - это метка времени отправления сообщения (то есть время, когда оно было отправлено), но я тоже не могу вспомнить ясно, и я не могу найти никаких ссылок на это в Интернете.

Обратите внимание, что ваш оператор receive может выполнять сопоставление в заголовке очереди входящих сообщений, что, конечно, позволяет получателю отбирать входящие сообщения вне (временного) порядка.

2
ответ дан 18 December 2019 в 14:44
поделиться

Согласно справочному руководству Erlang :

[Recieve] получает сообщения, отправленные процессу {{ 1}} с помощью оператора отправки (!). Шаблоны Шаблон последовательно сопоставляются с первым сообщением в временном порядке в почтовом ящике, затем со вторым и так далее.

Сообщения обрабатываются последовательно для каждого процесса.

1
ответ дан 18 December 2019 в 14:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: