using Akka; using Akka.Streams; using Akka.Streams.Dsl; actorSystem = ActorSystem.Create("ServiceB"); Source<int, NotUsed> source = Source.From(Enumerable.Range(1, 100)); using (var materializer = actorSystem.Materializer()) { source.RunForeach(i => Console.WriteLine(i.ToString()), materializer); Console.WriteLine("Loop가 끝나지 않아도 동시에 실행됨"); }
위 실행결과는 1부터 100까지 숫자를 단순하게 콘솔로 찍어주는것입니다.
for(int srcNum = 0; srcNum < 100; srcNum++) Console.WriteLine(srcNum.ToString()); Console.WriteLine("Loop가 끝나야 실행됨");
수행 결과만 보면 전통적인 개발방법에서 사용한 결과랑 다를바가 없습니다.
단순하게 코드량만 비교하면 AkkaStream을 사용안하는게 훨씬더 직관적입니다.
하지만 왜 이것을 사용해야하는것일까요?
AKKA Stream을 시작하기위해서는 위 코드의 차이를 이해하는것에부터 출발합니다.
우선 AkkaStream 코드에서는 큰틀 데이터의 소스와 처리기를 분리하였습니다.
우선 데이터의 소스는 단순하게 실행을 하려는 설명 청사진에 해당하며 이것은 재활용가능하거나
변환이 가능합니다. 그리고 실행을 분리함으로 계산 처리를 블록킹 없이 다음 처리가 가능합니다.
Loop의 범위가 int.Max라고 가정해봅시다. Loop가 끝날때까지 시간이 꾀걸릴것이며, 다음 진행 코드가 실행될수
없을 것입니다.
위 샘플에서 언급된 단어를 다음과 같이 정의 하겠습니다.
- Source : 출처가되는 데이터 소스,청사진
- Materrializer : 각 요소를 실행할 엔진