2013-10-02 15 views
6

Bir sürecin nasıl çalıştığını anlıyorum. Ve gen-server, vb. Gibi OTP davranışlarının nasıl uygulanacağını anlıyorum.Erlang: OTP'ye karşı spawn

Ancak, diğeri üzerinde bir yaklaşım seçtiğimde açık değil. Örneğin, Cesarini vd. al., Erlang Programlama'da veritabanı sunucusunu p 240 üzerinde bir süreç oluşturarak, bir döngü işlevi yazarak, vs. uygular. Joe Armstrong'un p 196'daki sohbet istemcisindeki sohbet istemcisi de bir süreç ortaya çıkarır.

Bunlar neden OTP gen sunucuları olarak daha iyi uygulanamaz? Eğitim amaçlı mı? Yoksa sağlam teknik nedenler var mı? Başka bir deyişle, hangi kurallar beni diğerine göre bir yaklaşım uygulamak için yönlendirirdi?

Çok teşekkürler. Yukarıdaki iki örnekte

cevap

7

, basit süreçleri eğitim amaçlı için tercih edilir olurken: Bu açıklamaya basittir, bu yazarlar öğretmek istediklerini iletmek için OTP açıklamak zorunda değilsiniz ve bunu anlamak zaten önemlidir Erlang'da bir süreç kavramı. OTP kurallarını izleyen gerçek dünyadaki bir uygulamada bile, tüm süreçler OTP davranışlarıyla uygulanmaz ve bir denetim ağacına yerleştirilir.

Başparmak kuralı oldukça basittir. OTP tasarım prensiplerini nu getirip getirmediğini (kod değişiklikleri, hata toleransı vb.) Gözden geçirerek ya da OTP uyumlu kod ile entegre etmeyi planlıyorsanız belirleyin. Getirdiği özelliklerden herhangi birini istiyorsanız ve tekerleği yeniden icat etmekten kaçınıyorsanız, OTP ilkelerini uygulayın.

Eğer OTP ilkelerine sadık ve dolayısıyla gen_* davranışları kullanıyorsanız, denetimli ya kod yükseltilmesi gerekmez herhangi kısa ömürlü süreci için basit bir balık yumurtası yapmalıdır. Bir sürümün dağıtımından daha uzun sürmeyecek (aksi halde, soft_purge'a ihtiyacınız olacaktır). Diğer tüm süreçler denetim ağacına yerleştirilmeli ve muhtemelen bir gen_ * davranışı uygulamalıdır.