Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

액터두개를 만들고 위와같이 작동을 시켜, Tick(탁구채에 맞은수를 모두 카운팅)

의 TPS를 측정합니다.  여기서 물리의 법칙을 무시해서 탁구공이 상대편에 전달되는 시간이 Zero라고 하면짧으면 짧을수록 많은 수가 처리되며

CPU를 최대한 활용해서 0에가깝게 작동되겠지만...물리적으로 0이 될순없을것같습니다. ( 더 깊이들어가면 수학이되버림)

성능 결과

측정을 위해 액터메시지당 DataDog의 Metric에 연결하였으며

...

Code Block
themeEmacs
linenumberstrue
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증가된 메시지를 되돌려줍니다.(상대편이 받고 다시 받게됩니다. - 무한반사)
            });
        }

    }
}

...