Post List

[네트워크 프로그래밍] 열혈 TCP/IP 23장 정리(IOCP)

[네트워크 프로그래밍] 열혈 TCP/IP 23장 정리(IOCP)


이번 챕터에서는 Windows운영체제의 IOCP에 대해 살펴보았습니다.

IOCP는 비동기 IO의 처리를 위해 나타난 방식입니다. 대략적인 컨셉은, 소켓이 할 일이 있다면 그 소켓이 그 일을 마치고 알리도록 하는 방식입니다. 

지금까지 select, epoll, iocp에 대해 학습했었는데, 이 장에서 정리를 하고자 합니다.

select를 학습할 때 나왔던 이야기는, IO Multiplexing 입니다.
fd를 select에 등록시켜 놓고, select함수가 등록되어있는 fd들을 순회하며 fd(소켓)가 변화되었는지 판단 후, 변화된 소켓을 확인하는 방식 입니다.

이때, 반복문을 사용하므로 성능이 낮아지나 이식성이 높다고 합니다.

단점을 극복하기 위해 리눅스의 epoll을 사용합니다.
epoll은 select의 단점을 극복하기 위해 도입되었는데, 소켓을 생성할 때 운영체제에 등록을 해둔 후, 변화된 소켓이 있다면 운영체제가 알려주는 방식을 사용합니다. 따라서 select처럼 매번 변화되었는지 순회하는 과정이 없어져 성능이 높아집니다.

IOCP도 epoll과 마찬가지인데, 둘 간의 구분되는점은 :

epoll은 소켓이 변화되었을 때 알려줍니다. 
iocp는 등록된 소켓이 IO를 마쳤을 때 알려줍니다.

그래서 epoll은 소켓이 변화되었다 하면, 그 변화된 소켓에 대한 처리를 진행하는 것이고
iocp는 소켓에 대한 일을 마친 후 신호를 주는 방식 입니다. 즉, 클라이언트 accept 후 쓰레드로 IOCP를 생성 후, 일을 마친 후 통지 받은 후 그 다음 로직 처리 로 요약할 수 있겠습니다.

[참고] 윤성우의 열혈 TCP/IP 소켓 프로그래밍



댓글