LOGIN • JOININ

JunRyoung Ju

Asio예제 코드가 상당히 잘못되어있군요....

저렇게 만들어서는 Queue를 넣는부분부터 엄청나게 많은 레이턴시를 발생할것같은데요...


1. 기본적인 C++ 11의 기능조차 사용하지 않은 경우입니다.

    Queue를 Pop하는 스레드인경우에는 기본적으로 Queue를 락하고 거기있는 오브젝트를 사용하는것이아니라.

    Queue를 락하고 스왑한다음에 락을 풀고 그대로 커넥션들에게 Queue의 리소스를 주고 사용합니다.

    멀티스레드면서 멀티스레딩의 1도 지키지 못했네요.

    즉 비동기를 사용하면서 비동기에 락을 걸어둔 셈입니다...

    구조 자체에 문제가 있는 경우군요.

2. 쓸데없는 부분에 Async가 상당히 많이 사용된것을 보실수 있습니다.

    138번째줄의 do_accept라던지, read body, read header ... 등등 같은 부분은 한개의 스레드로 통합할수 있다고 생각합니다..

    무엇보다 재귀함수로 엄청나게 많은 량의 스레드를 생산해내는데 그게 CPU를 차지하지 않으면 그건 그것대로 문제겠지요.

3. 마지막으로 OS에서 제공하는 크리티컬 섹션을 사용한것으로 보이는데요. 기본적으로 atomic, 즉 MemoryFance를 사용하는 lockfree queue를 사용하는것보다 느립니다...