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