Erlang сообщения цикла

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

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

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

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

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

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

2 ответа

Решение

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

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

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

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

Другие вопросы по тегам