Erlang сообщения цикла - PullRequest
6 голосов
/ 31 мая 2010

Как работают циклы сообщений в erlang, синхронизируются ли они, когда дело доходит до обработки сообщений?

Насколько я понимаю, цикл начнется с "получения" сообщения, а затем выполнения чего-либо и нажатияеще одна итерация цикла.

Так что же должно быть синхронизировано?верно?

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

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

Или я все неправильно понял?

Ответы [ 2 ]

9 голосов
/ 31 мая 2010

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

4 голосов
/ 31 мая 2010

Из руководства ( Эрлангский параллелизм

Каждый процесс имеет свою собственную очередь ввода для сообщений, которые он получает. Новые полученные сообщения помещаются в конец очереди. Когда процесс выполняет получение, первое сообщение в очереди сопоставляется с первым шаблоном в получении, если это совпадает, сообщение удаляется из очереди и выполняются действия, соответствующие шаблону.
Однако, если первый шаблон не совпадает, второй шаблон проверяется, если он соответствует, сообщение удаляется из очереди и выполняются действия, соответствующие второму шаблону. Если второй шаблон не соответствует третьему, пробуют и так далее до тех пор, пока не останется больше шаблона для тестирования. Если больше нет шаблонов для тестирования, первое сообщение сохраняется в очереди, и вместо этого мы пробуем второе сообщение. Если это соответствует какому-либо шаблону, выполняются соответствующие действия, и второе сообщение удаляется из очереди (сохраняя первое сообщение и любые другие сообщения в очереди). Если второе сообщение не совпадает, мы пробуем третье сообщение и так далее, пока не достигнем конца очереди. Если мы достигаем конца очереди, процесс блокируется (останавливает выполнение) и ждет, пока новое сообщение не будет получено, и эта процедура повторяется.
Конечно, реализация Erlang является «умной» и минимизирует количество раз, которое каждое сообщение проверяется на соответствие шаблонам в каждом приеме.

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

...