检查Gen_Fsm和Gen_Server文档后,我发现或多或少,它们的行为类似。在我看来,如果有一个循环函数用于发送广播或监听tcp sock,最好使用Gen_Fsm,否则使用gen_server。我想知道它是否正确?何时使用Gen_Fsm以及何时使用Gen_Server?
10
A
回答
9
你已经看到正确的gen_server
和gen_fsm
功能非常相似。
但是在大多数程序中有更多gen_server
比gen_fsm
的用法。
在我看来,gen_fsm
仅当使用率100%适合gen_fsm模型时才有用。所以必须有一个简单明了的有限状态机来适应你的问题。请注意,通常情况下,密克罗尼西亚联邦的国家数量在面对现实世界时会发生爆炸。
如果你发现自己有很多的辅助状态信息gen_fsm
的State
可变它可能是时间切换到gen_server
并添加gen_fsm
的状态到State
变量。
一般当有疑问:同时使用gen_server
和gen_fsm
的gen_server
一个缺点(它出来,在gen_fsm
通常更糟)是你不能使用选择性接收。选择性接收是降低实际应用中状态机复杂度的重要工具。
为了兼顾选择性接收和OTP行为,我推荐使用plain_fsm。
相关问题
- 1. 何时使用==以及何时使用?
- 2. 何时使用belongsTo以及何时hasMany?
- 3. 何时使用jQuery.ajax以及何时使用jQuery.post?
- 4. 何时使用Apache Helix以及何时使用Apache Mesos
- 5. 何时使用Abstract Factory以及何时使用Factory Method?
- 6. 何时使用LEFT JOIN以及何时使用INNER JOIN?
- 7. PHP:何时使用Traits以及何时使用静态方法?
- 8. 何时使用Value Formatter以及何时使用Value Resolver
- 9. 何时使用json文件以及何时使用js文件?
- 10. 何时使用:something =>'something'以及何时使用:something,'something'?
- 11. Elixir:何时使用'数字'以及何时使用'整数'
- 12. 何时使用Class.isInstance()以及何时使用instanceof运算符?
- 13. 何时使用Socket以及何时在Flex中使用XMLSocket?
- 14. 何时使用以及何时不使用Python 2.7_中的__init__
- 15. 何时使用undef_method以及何时使用remove_method?
- 16. 何时使用ICommand包装RelayCommand以及何时使用Just ReplayCommand?
- 17. 何时使用Core Data以及何时使用Sqlite?
- 18. 何时使用数组以及何时使用单元阵列?
- 19. 何时使用DataTrigger以及何时使用Converter?
- 20. 何时使用Docker-Compose以及何时使用Docker-Swarm
- 21. 何时使用dup以及何时在Ruby中使用克隆?
- 22. 何时使用布局以及何时使用活动?
- 23. 何时使用IDataReader以及何时使用DataReader?
- 24. 何时使用uid以及何时在$ $ $ $中使用$ id
- 25. 何时使用ASP.NET验证控件以及何时不使用?
- 26. 何时使用Pig以及何时使用Java for Mapreduce?
- 27. 何时使用Comparator以及何时在Java中使用Comparable?
- 28. 何时使用Twitter Bootstrap以及何时使用HTML5 Boilerplate?
- 29. 何时使用node.js以及何时使用ajax?
- 30. 何时使用json以及何时使用jquery $ .ajax进行jsonp?
你说:“......你不能使用选择性接收。”,这是为什么?我认为,只要我们不触及那些我们不感兴趣的消息,比如'$ gen_blah_blah'和系统消息,我们都很好。如果我们可以控制传入消息的格式,那么我们只能接收到我们感兴趣的内容,比如'receive {some_app_specific_message_tag,Msg} - > ...' – 2016-09-18 06:25:56
@NotanID那么您将不得不在'handle_info' ,并且不能使用'gen_server:call | cast'。此时,plain_fsm是更好的选择。 – niahoo 2017-02-02 09:27:15