2016-06-01 2 views
5

내 스트림에는 CPU 바인딩 스테이지와 IO 바인딩 스테이지가 균등하게 혼합되어 있습니다 (IO 스테이지마다 CPU 스테이지가 뒤 따른다). 내가하고 싶은 일은 IO 작업을 나머지 스트림과 다른 디스패처에 넣는 것입니다.Akka 스트림 - 다른 디스패처에 IO 바인딩 플로우 전달

전통적인 액터 기반 Akka 응용 프로그램에서 많은 수의 스레드가있는 고정 된 스레드 풀 디스패처에 IO 액터를 넣을 수 있습니다. CPU에 연결된 액터를 소수의 스레드 (몇 개, 이상적으로 코어 수의 1). 이를 통해 CPU 바운드 액터의 쓰레드 스위칭에서 낭비되는 시간을 줄이고 많은 쓰레드를 IO로 차단함으로써 처리량을 늘려야합니다.

이해가 되셨습니까? 그렇지 않다면, 왜? 그렇다면 IO 묶여있는 단계 (흐름)를 나머지 스트림과는 별도의 디스패처에 어떻게 배치합니까?

나는 자동 융합 기능을 사용하지 않는 것이 도움이된다. 그러나 여전히 거의 동일한 Akka 대응 제품보다 처리량이 훨씬 적습니다.

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

것은이 비동기 경계를 소개합니다 :

답변

8

기본값은 당신과 같이, 스테이지 속성을 사용하여 별도의 디스패처에서 실행해야 함을 표시 할 수 있습니다, 흐름의 모든 단계가 같은 배우에서 실행되는 것입니다 그 단계를 중심으로 효과적으로 자신의 배우로 운영합니다. 비동기식 경계선에 비용이 많이 드는 것을 피하기 위해 무대는 이제 실제로 업스트림에서 한 번에 16 개 요소에 대한 수요를 보내므로이 사실을 알고 있어야합니다.

버퍼 크기를 추가 특성으로 조정할 수 있습니다.이 경우에는 한 번에 하나의 요소를 묻는 융합 단계처럼 동작합니다.이 경우 사용 사례에 따라 너무 많은 오버 헤드가 발생할 수 있습니다. 워드 프로세서의

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

관련 부품 : 대답에 대한

+0

감사합니다. 이것이 제가 찾고 있던 것입니다. – anindyaju99

+0

응답을 보내고 백그라운드에서 계속 작업하려면 어떻게합니까? [This] (https://gist.github.com/asarkar/37e4cb026c463f6334617e923cfc4b12)가 효과가있는 것 같습니다. –