Когда использовать 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.

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