Вы правильно поняли, что gen_server
и gen_fsm
очень похожи по функциональности.
Однако в большинстве программ использование gen_server
намного больше, чем gen_fsm
.
На мой взгляд, gen_fsm
полезен только тогда, когда использование 100% соответствует модели gen_fsm.Таким образом, должен быть простой и понятный конечный автомат, который подходит для вашей задачи.Имейте в виду, что, как правило, подсчет состояний FSM имеет тенденцию взрываться перед лицом реального мира.
Если в переменной State
*1013* имеется много вторичной информации о состоянии, возможно, пора переключиться на gen_server
и добавить состояние gen_fsm
в переменную State
.
Как правило, если есть сомнения: используйте gen_server
Один из недостатков gen_server
и gen_fsm
(который обычно хуже gen_fsm
) заключается в том, что вы не можете использоватьвыборочный прием.Выборочный прием - это важный инструмент для снижения сложности конечного автомата в реальных приложениях.
Чтобы использовать преимущества как селективного приема, так и поведения OTP, я бы порекомендовал plain_fsm .