erlang - 何时使用Gen_Fsm以及何时使用Gen_Server?

标签 erlang gen-server gen-fsm

在检查了Gen_Fsm和Gen_Server文档之后,我发现它们或多或少地表现出相似的行为。我认为,如果有一个循环函数用于发送广播或监听tcp socks ,则最好使用Gen_Fsm,否则最好使用gen_server。我想知道这是否对吗?

最佳答案

您已经正确地看到gen_servergen_fsm在功能上非常相似。

但是,在大多数程序中,gen_servergen_fsm的用法要多得多。

我认为gen_fsm仅在用法100%符合gen_fsm模型时才有用。因此,必须有一个适合您问题的简单明了的有限状态机。请注意,通常FSM的状态数在面对现实世界时会爆炸。

如果您发现自己在gen_fsmState变量中有很多辅助状态信息,则可能是时候切换到gen_server并将gen_fsm的状态添加到State变量中了。

通常在有疑问时:使用gen_servergen_servergen_fsm的一个缺点(通常在gen_fsm中更糟糕)是不能使用选择性接收。选择性接收是降低现实应用中状态机复杂性的重要工具。

为了同时具有选择性接收和OTP行为的优势,我建议plain_fsm

关于erlang - 何时使用Gen_Fsm以及何时使用Gen_Server?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6201222/

相关文章:

Erlang 停止 gen_server

erlang - 将 Learn You Some Erlang 教程从 gen_fsm 转换为 gen_statem

c++ - 如何在 on_entry 中使用 Boost.MSM is_flag_active?

erlang - erlang中的erl终端如何完整显示

erlang - ejabberd 钩子(Hook)的文档?

二郎, 'catch 1=0' 和 '(catch 1=0)' 有什么区别?

concurrency - erlang流程和消息传递体系结构

erlang - 如何让行为回调函数不被实现?

testing - Elixir - 测试完整的脚本

erlang - 如何可视化Erlang gen_fsm