В чем разница между gen_server и gen_statem?
В Erlang есть два поведения, которые кажутся очень похожими:
-behaviour(gen_server).
-behaviour(gen_statem).
В чем практическая разница? Когда я должен использовать одно вместо другого?
1 ответ
означает «общий сервер», и это структура / интерфейс для создания процессов, обрабатывающих запросы и события.
означает «универсальный конечный автомат», и это структура / интерфейс для создания процессов, которые ведут себя как конечные автоматы, реагирующие на события.
Вы можете построить конечный автомат поверх a или иметь одно-конечный автомат, действующий как сервер.
Чтобы выбрать между одним и другим, вы должны проверить соответствующую главу в документе , но я бы сузил ее до:
Если вам нужно смоделировать конечный автомат, рассмотрите возможности, предоставляемые
gen_statem
. Для простых государственных автоматов без наворотов
gen_server
работает нормально и проще.