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

时间:2011-06-01 12:34:39

标签: erlang gen-server gen-fsm

在检查Gen_Fsm和Gen_Server文档后,我发现它们或多或少地表现为类似的行为。在我看来,如果有一个循环函数用于发送广播或监听tcp sock,最好使用Gen_Fsm,否则使用gen_server。我想知道它是否正确?

1 个答案:

答案 0 :(得分:9)

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

但是,在大多数程序中,使用gen_server比使用gen_fsm要多得多。

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

如果您发现自己在gen_fsm的{​​{1}}变量中有大量次要状态信息,则可能需要切换到State并将gen_server的状态添加到gen_fsm变量。

通常在有疑问时:使用State

gen_servergen_server的一个缺点(通常在gen_fsm中更糟糕)是您无法使用选择性接收。选择性接收是降低现实应用中状态机复杂性的重要工具。

为了获得选择性接收和OTP行为的优势,我建议plain_fsm