Programing/Akka

Akka Stream Operator Fusion

BUST 2018. 6. 29. 13:53

Akka Stream Operator Fusion

- 기본 설정으로 Akka Stream은 stream operator (source, sink)를 하나로 합치는데(fused), 이는 하나의 actor에서 stream graph를 실행되는 것을 의미한다.
- 하나의 Operator에서 다른 Operator로 데이터를 전달하는 것은 fused stage간의 전달보다는 더 빠르다 (비동기 메시지 overhead때문에)
- fused stream operator는 동시에 실행되지 않는다. 이말은 CPU Core는 하나의 fused part만 실행을 시킨다.
- 병렬 프로세싱 (Parallel Proccess)를 하기위해서는 Asynchronous Boundaries를 직접 손으로 넣어줘야한다.
Source.range(1, 3)
    .map(x -> x + 1).async()
    .map(x -> x * 2)
    .to(Sink.ignore());

- 2개의 지대로 구분을 할수 있다. 각각의 하나의 Actor로 작동이 된다. 이는 CPU가 Parallel하게 작동을 할수가 있다.

- 빨간 원안에 있는 작동은 하나의 Actor로 작동이 되고 다른 부분이 다른 Actor에서 작동이 된다는 의미.


Reference

- https://doc.akka.io/docs/akka/2.5/stream/stream-flows-and-basics.html
- https://akka.io/blog/2016/07/06/threading-and-concurrency-in-akka-streams-explained