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