Page History
...
액터두개를 만들고 위와같이 작동을 시켜, Tick(탁구채에 맞은수를 모두 카운팅)
의 TPS를 측정합니다. 여기서 물리의 법칙을 무시해서 탁구공이 상대편에 전달되는 시간이 Zero라고 하면짧으면 짧을수록 많은 수가 처리되며
CPU를 최대한 활용해서 0에가깝게 작동되겠지만...물리적으로 0이 될순없을것같습니다. ( 더 깊이들어가면 수학이되버림)
성능 결과
측정을 위해 액터메시지당 DataDog의 Metric에 연결하였으며
...
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증가된 메시지를 되돌려줍니다.(상대편이 받고 다시 받게됩니다. - 무한반사) }); } } } |
...