檢查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. 何時使用Cucumber以及何時使用RSpec?
- 2. 何時使用jQuery.ajax以及何時使用jQuery.post?
- 3. 何時使用json以及何時使用jquery $ .ajax進行jsonp?
- 4. 何時使用dup以及何時在Ruby中使用克隆?
- 5. 何時使用undef_method以及何時使用remove_method?
- 6. 何時使用ContainerMovieClip以及何時使用UIMovieClip?
- 7. 何時使用DataTrigger以及何時使用Converter?
- 8. 何時使用Abstract Factory以及何時使用Factory Method?
- 9. 何時使用ASP.NET驗證控件以及何時不使用?
- 10. 何時使用Apache Helix以及何時使用Apache Mesos
- 11. 何時使用Socket以及何時在Flex中使用XMLSocket?
- 12. 何時使用LEFT JOIN以及何時使用INNER JOIN?
- 13. 何時使用數組以及何時使用單元陣列?
- 14. 何時使用assert()以及何時使用try catch?
- 15. 何時使用'if ... else if'以及何時使用
- 16. 何時使用Class.isInstance()以及何時使用instanceof運算符?
- 17. 瞭解何時使用事件以及何時使用回調
- 18. 何時使用Comparator以及何時在Java中使用Comparable?
- 19. JHipster:何時使用$ http以及何時使用$ resource
- 20. 何時使用Docker-Compose以及何時使用Docker-Swarm
- 21. 何時使用模塊以及何時使用某個類
- 22. 何時使用Value Formatter以及何時使用Value Resolver
- 23. SSL - 如何以及何時使用它
- 24. 何時以及如何使用QueryString [「ReturnUrl」]
- 25. 何時何時使用以及何時不使用DP和PX措施Android
- 26. 什麼時候應該使用require()以及何時使用define()?
- 27. 什麼時候使用Task以及何時使用Thread?
- 28. 爲什麼以及何時使用process.nextTick?
- 29. 爲什麼以及何時使用LINQ?
- 30. 您如何知道何時使用XML解析器以及何時使用ActiveResource?
你說:「......你不能使用選擇性接收。」,這是爲什麼?我認爲,只要我們不觸及那些我們不感興趣的消息,比如'$ 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