더북(TheBook)

그럼 epoll에서 스레드 풀링을 구현하려면 어떻게 해야 할까요? 여러 가지 방법이 있지만, 필자가 프라우드넷을 개발할 때 했던 방식은 다음과 같습니다.

• 스레드 개수만큼 epoll 객체를 둡니다.

• 각 스레드는 자기만의 epoll을 처리합니다.

• 여러 소켓은 이들 epoll 중 하나에만 배정합니다.

p183

▲ 그림 3-23 스레드 개수만큼 epoll 객체를 두고 처리

 

여러 스레드가 있지만, 한 소켓의 이벤트는 지정된 한 스레드에서만 발생합니다. 그래도 소켓들이 여러 스레드 중 하나에 배정되기 때문에 아예 스레드 풀링이 없는 것보다는 낫습니다. 물론 IOCP만큼 균형 있게 신호를 분담해 주는 효율적인 처리 성능을 내지는 못하지만요.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.