В чем разница между gen_server и gen_statem?

В Erlang есть два поведения, которые кажутся очень похожими:

      -behaviour(gen_server).
-behaviour(gen_statem).

В чем практическая разница? Когда я должен использовать одно вместо другого?

1 ответ

означает «общий сервер», и это структура / интерфейс для создания процессов, обрабатывающих запросы и события.

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

Вы можете построить конечный автомат поверх a или иметь одно-конечный автомат, действующий как сервер.

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

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

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