2016-06-01 9 views
5

Mój strumień ma równomierne połączenie etapów związanych z CPU i IO (po każdym etapie IO następuje etap CPU). Co chcę zrobić, to umieścić operacje we/wy na innym dyspozytorze niż reszta strumienia.Strumień Akka - ustawianie przepływu IO na innym dyktafonie

W tradycyjnej aplikacji Akka opartej na aktorach mogłem umieścić moich aktorów IO na stałym wątku kontrolera puli z wieloma wątkami, podczas gdy aktorzy związani z procesorem przyłączyli się do puli łączenia widelików z niewielką liczbą wątków (niektóre wielokrotne, idealnie 1, z liczby rdzeni). To powinno zmniejszyć czas tracony na przełączanie wątków dla aktorów związanych z procesorem, zwiększając przepustowość poprzez blokowanie wielu wątków w IO.

Czy to zrozumienie jest właściwe? Jeśli nie, dlaczego? Jeśli tak, to w jaki sposób umieścić moje etapy IO (Flows) na oddzielnym kontrolerze od reszty strumienia?

Próbowałem wyłączyć automatyczne łączenie i to pomaga. Ale wciąż ma znacznie mniejszą przepustowość niż niemal odpowiednik odpowiednika Akka.

Odpowiedz

8

Domyślnym jest to, że wszystkie etapy przepływu prowadzony jest na tym samym aktorem, można zaznaczyć, że etapy powinny działać na oddzielnym dyspozytora za pomocą atrybutów, tak jak poniżej:

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

ten wprowadzi również granice asynchronicznych na tym etapie, efektywnie działając na własnym aktorze. Aby uniknąć sytuacji, w której asynchroniczna granica stanie się kosztowna, scena będzie teraz wysyłać żądanie 16 elementów naraz z góry, więc jest to coś, o czym musisz wiedzieć.

Rozmiar bufora można poprawić dodatkowym atrybutem, w tym przypadku zachowując się jak stopnie połączone w tym, że prosi o jeden element na raz, należy pamiętać, że może to spowodować zbyt duży narzut, w zależności od przypadku użycia.

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

Istotne części docs:

+0

Dzięki za odpowiedź. Tego właśnie szukałem. – anindyaju99

+0

Co jeśli chcę zwrócić odpowiedź i kontynuować pracę w tle? [This] (https://gist.github.com/asarkar/37e4cb026c463f6334617e923cfc4b12) wydaje się działać. –