2016-06-01 28 views
5

Akımım, CPU bağlı ve IO bağlı aşamaların eşit bir karışımına sahiptir (her IO aşamasını bir CPU aşaması izler). Yapmak istediğim, IO işlemlerini, akışın geri kalanından farklı bir dağıtıcıya koymak.Akka akışı - farklı bir dağıtıcıya IO bağlı Akışı koyma

Geleneksel bir aktör tabanlı Akka uygulamasında IO'larımı çok sayıda iş parçacığıyla sabit bir iş parçacığı havuzu dağıtıcısına koyabilirdim. ideal olarak 1, çekirdek sayısı. Bu, CPU bağlı aktörler için iş parçacığı değiştirme sırasında boşa harcanan zamanı azaltırken, IO üzerinde çok sayıda iş parçacığı tıkanarak iş hacmini artırır.

Bu anlayış doğru mu? Değilse neden? Eğer evet ise, o zaman IO bağlı aşamalarımı (Flows) akışının geri kalanından ayrı bir dağıtıcıya nasıl koyarım?

Otomatik kaynaşmayı kapatmayı denedim ve bu yardımcı oluyor. Ama yine de neredeyse eşdeğer Akka muadilinden çok daha az üretkenliğe sahip.

stage.withAttributes(ActorAttributes.dispatcher("dispatcher-name")) 

Bu aynı zamanda asenkron sınırlarını tanıtacak:

cevap

8

varsayılan bunu gibi aşamaları özelliklerini kullanarak ayrı memuru çalıştırmak gerektiğini işaretleyebilirsiniz, bir akışta tüm aşamaları aynı aktör çalıştırmak olmasıdır Bu sahnenin etrafında, kendi aktöründe etkili bir şekilde koşuyor. Eşzamansız sınırın maliyetli olmasından kaçınmak için sahne şimdi gerçek zamanlı olarak 16 öğeye yönelik talep gönderecek, bu yüzden farkında olmanız gereken bir şey.

Arabellek boyutu ek bir öznitelikle düzeltilebilir; bu durumda, bir defada tek bir öğe istediği için erimiş aşamalar gibi davranması, kullanım durumuna bağlı olarak bunun çok fazla yük getirebileceğini unutmayın. dokümanlarınızdan

stage.withAttributes(Attributes.inputBuffer(1, 1)) 

İlgili parçalar: cevap için

+0

teşekkürler. Aradığım şey bu. – anindyaju99

+0

Yanıt vermek ve arka planda çalışmaya devam etmek istersem ne olur? [This] (https://gist.github.com/asarkar/37e4cb026c463f6334617e923cfc4b12) çalışıyor gibi görünüyor. –