何时使用 Gen_Fsm,何时使用 Gen_Server?

发布于 2024-11-10 17:31:15 字数 122 浏览 3 评论 0原文

在查看了 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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

明月夜 2024-11-17 17:31:15

您已经看到,gen_servergen_fsm 在功能上非常相似。

然而,在大多数程序中,gen_server 的使用量远多于 gen_fsm 的使用量。

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

如果您发现 gen_fsmState 变量中有大量辅助状态信息,那么可能是时候切换到 gen_server 并添加 gen_fsm的状态到State变量。

一般来说,当有疑问时:使用 gen_server

gen_servergen_fsm 的一个缺点(通常在 gen_fsm 中表现更糟) )是你不能使用选择性接收。选择性接收是降低现实应用中状态机复杂性的重要工具。

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

You have seen right that gen_server and gen_fsm are very similar in functionality.

However in most programs there is much more gen_server than gen_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's Statevariable its probably time to switch to gen_server and add gen_fsm' s state to the State variable.

Generally when in doubt: use gen_server

One disadvantage of both gen_server and gen_fsm (which comes out worse in gen_fsmusually) 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文