何时使用 Gen_Fsm,何时使用 Gen_Server?
在查看了 Gen_Fsm 和 Gen_Server 文档后,我发现它们或多或少具有类似的行为。我认为,如果有一个循环函数用于发送广播或监听tcp sock,最好使用Gen_Fsm,否则使用gen_server。我想知道这是否正确?
After checking out Gen_Fsm and Gen_Server documents, I found that, more or less, they act as similar behavior. In my opinion, if there is one loop function for sending broadcast or listening tcp sock, it is better to use Gen_Fsm, or else to use gen_server. i want to know whether it is right ?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
您已经看到,
gen_server
和gen_fsm
在功能上非常相似。然而,在大多数程序中,
gen_server
的使用量远多于gen_fsm
的使用量。在我看来,
gen_fsm
仅当使用率 100% 符合 gen_fsm 模型时才有用。因此必须有一个简单明了的有限状态机适合您的问题。请注意,通常 FSM 的状态计数在面对现实世界时往往会爆炸。如果您发现
gen_fsm
的State
变量中有大量辅助状态信息,那么可能是时候切换到gen_server
并添加gen_fsm
的状态到State
变量。一般来说,当有疑问时:使用
gen_server
gen_server
和gen_fsm
的一个缺点(通常在gen_fsm
中表现更糟) )是你不能使用选择性接收。选择性接收是降低现实应用中状态机复杂性的重要工具。为了同时拥有选择性接收和 OTP 行为的优势,我建议使用 plain_fsm。
You have seen right that
gen_server
andgen_fsm
are very similar in functionality.However in most programs there is much more
gen_server
thangen_fsm
usage.In my opinion
gen_fsm
is only useful when the usage 100% fits the gen_fsm model. So there has to be a simple and clear finite state machine that fits to your problem. Be aware that usually FSM's state count tends to explode in the face of the real world.If you find yourself having lots of secondary state information in
gen_fsm
'sState
variable its probably time to switch togen_server
and addgen_fsm
' s state to theState
variable.Generally when in doubt: use
gen_server
One disadvantage of both
gen_server
andgen_fsm
(which comes out worse ingen_fsm
usually) is that you can't use selective receive. Selective receive is a important tool for reducing state machine complexity in real world applications.To have the advantage of both selective receive and OTP behaviours I'd recommend plain_fsm.