Циклы сообщений Erlang

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

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

Значит, это должно быть синхронизировано? правильно?

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

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

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


person Roger Johansson    schedule 31.05.2010    source источник


Ответы (2)


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

person Frank Shearar    schedule 31.05.2010

Из руководства (параллелизм Erlang

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

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

person weismat    schedule 31.05.2010