그럼 epoll에서 스레드 풀링을 구현하려면 어떻게 해야 할까요? 여러 가지 방법이 있지만, 필자가 프라우드넷을 개발할 때 했던 방식은 다음과 같습니다.
• 스레드 개수만큼 epoll 객체를 둡니다.
• 각 스레드는 자기만의 epoll을 처리합니다.
• 여러 소켓은 이들 epoll 중 하나에만 배정합니다.
▲ 그림 3-23 스레드 개수만큼 epoll 객체를 두고 처리
여러 스레드가 있지만, 한 소켓의 이벤트는 지정된 한 스레드에서만 발생합니다. 그래도 소켓들이 여러 스레드 중 하나에 배정되기 때문에 아예 스레드 풀링이 없는 것보다는 낫습니다. 물론 IOCP만큼 균형 있게 신호를 분담해 주는 효율적인 처리 성능을 내지는 못하지만요.