Erlang передают циклы

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

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

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

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

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

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

7
задан Roger Johansson 31 May 2010 в 11:59
поделиться

2 ответа

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

9
ответ дан 6 December 2019 в 19:33
поделиться

Из руководства ( Erlang concurrency

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

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

4
ответ дан 6 December 2019 в 19:33
поделиться
Другие вопросы по тегам:

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