2015-05-06 18 views
7

Çalışmalarımı gerçekleştirmek için bir aktör havuzuna başarılı bir şekilde iş göndermiştim, ancak şimdi tüm çalışanlar tarafından döndürülen sonuçlara ilişkin bir takım toplama yapmak istiyorum. Herkesin bittiğini nasıl bilebilirim?Akka.Net'te tüm işlerin tamamlanması için nasıl beklerim?

En iyi geldiğim, bir dizi istek kimliğini sürdürmek ve bu kümenin sıfıra gitmesini beklemek, ancak bu durum hiç de eksik değil.

cevap

8

Genel olarak, bunun için "Komutan" deseni dediğimiz şeyi kullanmak istersiniz. Esasen, görevi başlatmak ve izlemekten sorumlu tek bir aktörünüz (Commander) var. Daha sonra, aktör havuzunun karşısındaki asıl işi hazırlayın ve bitirdiklerinde Commander'a geri bildirmelerini sağlayın. Komutan, işin ilerleyişini # completions/size of worker pool hesaplayarak izleyebilir.

Bu şekilde, işçiler

Bir görebilirsiniz (bu "Error Kernel pattern" denir) izlenir ve bunlar işi bağımsız olarak yeniden, ancak tüm değerli görev düzey devlet ve bilgi Komutanı yaşıyor olabilir Bunun örneğini Akka.NET scalable webcrawler demo.

+1

Teşekkürler. Bu aslında yaptığım şey gibi geliyor. Her şeyi koordine eden ve işlerini yöneten ve yanıtları takip eden bir durumdayım. Geç teslim ettiğimiz dokümanlar hiç yoktan var. Teşekkürler! – Damian

+0

durumunda, "komutan", tüm çocuklarda ** bekle ** tamamlanmalı mı? değilse, "komutan" ** aynı anda iki kez ** icra edilemez mi? – constructor

+0

@constructor Komutlarınızın havuzunu oluşturarak bu sınırlamayı aşabilirsiniz. Sonra sadece havuzunuza iş gönderirsiniz ve komutan aktörler arasındaki çalışmayı dengeler. (Komutan aktörler aynı zamanda durumsal, yani “Meşgul” veya “Ol” (Hazır Ol) olabilirler ve “Stash” ın yeni iş taleplerini “Hazır” olmak için “Hazır” olana kadar karar verebilirler. – BrainSlugs83

İlgili konular