когда использовать Gen_Fsm и когда использовать Gen_Server? - PullRequest
10 голосов
/ 01 июня 2011

Изучив документы Gen_Fsm и Gen_Server, я обнаружил, что они более или менее похожи друг на друга. На мой взгляд, если есть одна функция цикла для отправки широковещательного или прослушиваемого tcp-носка, лучше использовать Gen_Fsm, либо использовать gen_server. я хочу знать, правильно ли это?

1 Ответ

9 голосов
/ 01 июня 2011

Вы правильно поняли, что 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 .

...