Gen_Fsm ve Gen_Server belgelerini inceledikten sonra, aşağı yukarı benzer davranışlarda bulunduklarını gördüm. Benim görüşüme göre, yayın veya dinleme tcp çorap göndermek için bir döngü işlevi varsa, Gen_Fsm kullanmak veya gen_server kullanmak için daha iyidir. doğru olup olmadığını bilmek istiyorum?Gen_Fsm ne zaman kullanılır ve Gen_Server ne zaman kullanılır?
cevap
gen_server
ve gen_fsm
'un işlevsellikte çok benzer olduğunu doğru gördünüz. Ancak, çoğu programda, gen_fsm
kullanımından daha fazla gen_server
vardır.
Benim düşünceme göre gen_fsm
sadece% 100 kullanımı gen_fsm modeline uygun olduğunda kullanışlıdır. Yani probleminize uyan basit ve net sonlu bir durum makinesi olmalı. Genellikle FSM'nin devlet sayısının gerçek dünya karşısında patlamaya eğilimli olduğunu unutmayın.
kendinizi 'gen_server
geçmek ve gen_fsm
eklemek lar State
değişken onun muhtemelen zaman' State
değişkene ler devlet gen_fsm
ikincil durum bilgisi çok sahip bulursanız
Genellikle şüphe olduğunda: (genellikle gen_fsm
kötü çıkar) seçici kullanmak alamazsınız olmasıdır gen_server
ve gen_fsm
hem gen_server
Bir dezavantaj kullanın. Seçici alım, gerçek dünya uygulamalarında durum makinesi karmaşıklığını azaltmak için önemli bir araçtır.
Hem seçici alım hem de OTP davranışlarından yararlanmak için plain_fsm'u öneririm.
- 1. Vektörler ne zaman kullanılır ve C++ dizini ne zaman kullanılır?
- 2. undef_method ne zaman kullanılır ve remove_method ne zaman kullanılır?
- 3. Parallel.For ne zaman kullanılır?
- 4. 'java.util.Objects. *' Ne zaman kullanılır?
- 5. recyclerView.setHasFixedSize ne zaman kullanılır?
- 6. StringIO ne zaman kullanılır?
- 7. Ne zaman kullanılmalı ve Aurelia'da ne zaman kullanılır?
- 8. Julia'nın dönüşümü ne zaman kullanılır?
- 9. Fabrika kalıpları ne zaman kullanılır?
- 10. Bir initform ne zaman kullanılır?
- 11. Ne zaman React createFragment kullanılır?
- 12. İyon bölmesi ne zaman kullanılır?
- 13. RxAndroid: bindActivity ne zaman kullanılır ve neden?
- 14. SLEEP(), MySQL'de nasıl ve ne zaman kullanılır?
- 15. Caddr_t'nin önemi nedir ve ne zaman kullanılır?
- 16. @Embedded ve @Embeddable ne zaman kullanılır?
- 17. Silverlight'ta UserControl vs Control ne zaman kullanılır?
- 18. Android uygulamasında Dagger ne zaman kullanılır?
- 19. Caffe'de yerinde katmanlar ne zaman kullanılır?
- 20. <!--[if !IE]> ne zaman kullanılır?
- 21. IsRoot, UML'de IsAbstract & IsLeaf ne zaman kullanılır?
- 22. Ne zaman Kullanılır? Vs. Karşılaştırma Clojure
- 23. BackgroundWorker'ı veya Konuları yönetme ne zaman kullanılır?
- 24. JavaScript şablon motorları ne zaman kullanılır?
- 25. Yay ne zaman kullanılır: url etiketi?
- 26. Objective-C 'kendini' ne zaman kullanılır
- 27. jstl içinde requestScope ne zaman kullanılır?
- 28. Uzay gemisi operatörü ne zaman kullanılır?
- 29. InsertAllOnSubmit <TSubEntity> ne zaman kullanılır?
- 30. SML'de noktalı virgül ne zaman kullanılır?
dediniz ki: "... seçici alımını kullanamazsınız", neden bu? İlgilendiğimiz mesajlara, "gen_blah_blah" ve sistem mesajları gibi dokunmadığımız sürece, biz iyiyiz diye düşünüyorum. Gelen mesajın formatını kontrol edebiliyorsak, sadece ilgilendiğimizleri alabiliriz, bu gibi "alma {some_app_specific_message_tag, Msg} -> ..." –
@NotanID iyi seçmeniz gerekir "handle_info' ve 'gen_server: call | cast' kullanamayacak. Bu noktada, plain_fsm daha iyi bir seçimdir. – niahoo