더북(TheBook)

표 3-4는 IOCP와 epoll을 비교 및 정리한 것입니다.

▼ 표 3-4 IOCP와 epoll의 장단점

구분

IOCP

epoll

블로킹을 없애는 수단

Overlapped I/O

논블록 소켓

블로킹 없는 처리 순서

1. Overlapped I/O를 건다.

2. 완료 신호를 꺼낸다.

3. 완료 신호에 대한 나머지 처리를 한다.

4. 끝나고 나서 다시 Overlapped I/O를 건다.

1. I/O 이벤트를 꺼낸다.

2. 꺼낸 이벤트에 대응하는 소켓에 대한 논블록 I/O를 실행한다.

지원 플랫폼

윈도에서만 사용 가능하다.

리눅스, 안드로이드에서 사용 가능하다.

 

IOCP는 epoll보다는 사용법이 복잡합니다. 그 대신에 성능상 유리한 기능이 몇 가지 더 있습니다.

epoll을 쓰는 리눅스에서는 TCP 소켓으로 수신을 한 후에 데이터 수신을 하려면 소켓 수신 함수(recv)를 이어서 호출해 주어야 합니다. 그러나 IOCP를 쓰는 윈도 서버에서는 연결 받기와 수신을 소켓 함수 호출 한 번으로 끝낼 수 있습니다. 부가적으로 연결된 소켓의 끝점 정보를 얻는 것도 같이 끝내 버릴 수 있어 프로그램 최적화에 유리합니다.

▼ 표 3-5 윈도 서버와 리눅스 서버의 커널 함수 호출 비교6

윈도 서버

리눅스 서버

AcceptEx

GetAcceptExSockaddrs

accept

recv

getsockname

getpeername

 

6 유저 모드 함수입니다. 따라서 다른 소켓 함수보다 처리량이 적습니다.

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