Page History
...
Code Block | ||||
---|---|---|---|---|
| ||||
using Akka.Actor; using Akka.Event; using Akka.Monitoring; namespace AkkaDotBootApi.Actor { public class InfiniteMessage { public string Message { get; set; } public uint Count { get; set; } } public class InfiniteReflectionActor : ReceiveActor { private IActorRef ReplyActor; private readonly ILoggingAdapter logger = Context.GetLogger(); public InfiniteReflectionActor() { ReceiveAsync<IActorRef>(async actorRef => { ReplyActor = actorRef; }); ReceiveAsync<InfiniteMessage>(async infiniteMessage => { Context.IncrementCounter("akka.infinite.metric"); // <-- 요녀석이 성능카운터 측정기, 지정된이름으로 메시지당 1증가합니다.(관찰자를 등록함으로 성능이 미비하게 희생될수 있으나,게의치 않겠습니다.) var reply = new InfiniteMessage { Message = infiniteMessage.Message, Count = ++infiniteMessage.Count }; if(reply.Count % 50000 == 0) // <-- 작동잘하는지 확인하기위해 5만건당 로그를 찍습니다.( 참고로 콘솔창은 해당 TPS를 못 따라가기때문에 건수마다 찍으면 안됩니다위험합니다.) { logger.Info($"Count:{reply.Count}"); } ReplyActor.Tell(reply); // 카운팅 1증가된 메시지를 되돌려줍니다.(상대편이 받고 다시 받게됩니다. - 무한반사) }); } } } |
...
닷넷의 일반적인 스레드풀을 사용하느냐? TPL을 사용하느냐? 또는 forkJoin을 사용하느냐 튜닝이가능합니다.
액터모델의 개수가 작고 단순해서 그런지여기서는, 튜닝값을 이리저리 바꿔도 성능에 큰 차이가 없습니다.오히려 너무많은 무한 액터를 생성하면(5쌍이상) 속도가 저하됩니다없음을 확인하였습니다.
참고링크 : https://getakka.net/articles/actors/dispatchers.html
...
- 개체별 합리적으로 호출하는지?
- 해당 개체는 성능적으로 효율적으로 작동하는 개체인지?
- 메모리 누수여부?
성능 결과
- 탁구대 3대정도(공은 두개씩)가 안정적으로 초당 10만건 처리가 가능
- 기기당 분당 4~6백만건의 메시지 처리초당처리 10만건정도
- GC는 일어나지만 메모리 누수는 없음
도전과제
Warning |
---|
만족할만한 성능이 나온것은 아닌거 같으며 기기당 초당 5천만의 목표치에 도달하지 못하였습니다. 핑퐁테스트가 컨텍스트전환으로 인해 성능적으로 불리한것인지? GC발생을 조절해야하는지? 변종실험은 계속됩니다. ( 우선 측정가능한 상태로 만든것에 의미를 두었습니다 .) |
...