Порядок сообщений - PullRequest
       14

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

5 голосов
/ 17 марта 2010

Чтение (достаточно снятое для кодирования) через Программирование Эрланга и Программирование Эрланга .

Один вопрос, который так прост, как кажется:

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

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

Исходя из всего пула C / Thread / Shared State ... Я хочу получить этот бетон. Я понимаю распределение приложения, но хочу убедиться, что «сырые кости» - это то, что я ожидаю, прежде чем создавать процессы и распределять рабочую нагрузку.

Кроме того, я прав, полагая, что весь мир в настоящее время просматривает тексты Эрланга;)

Ответы [ 3 ]

10 голосов
/ 18 марта 2010

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

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

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

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

2 голосов
/ 17 марта 2010

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

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

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

1 голос
/ 18 марта 2010

В справочном руководстве erlang :

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...