본문 바로가기

Network Programing/Network 개념

소켓 입출력 모델 - 4. Overlapped 모델과 IOCP

4. Overlapped 모델과 IOCP

  - 기본적으로 Overlapped 와 IOCP를 따로 구분하긴 애매하다. IOCP는 Overlapped 모델을 기반으로 확장한 것이기 때문이다.


   - Overlapped I/O는 중첩 입출력 or 비동기 입출력(Asynchronous I/O)라고도 부른다.

   - 어플리케이션은 입출력 함수를 호출한 후 입출력 작업의 완료 여부와 무관하게 다른 작업을 진행

   - 입출력 작업이 끝나면 운영체제는 작업완료를 어플리케이션에 알려준다.

   - 이때 어플리케이션은 다른 작업을 중단하고 입출력 결과를 처리한다.

 

※ 소켓 입출력 작업이 완료되면, 운영체제는 어플리케이션이 등록한 함수를 자동으로 호출한다.


- 쉽게 이야기한다면 IO를 요청했다는 정보가 Device로 날라가게 되며 더이상 쓰레드는 신경을 안쓰고 다른 일을 처리한다. IO처리는 Device Driver에서 처리하다가 끝나게 되면 우리에게 끝났다은 것을 알려준다. 


5. IOCP(Input/Output Complete Port)

 - IOCP는 Overlapped I/O에 각각 처리를 전담하는 놈을 만들어서 다른 놈들은 처리하는 방법

 - 제한된 쓰레드의 수를 통해서, 여러 소켓의 입출력을 담당

 - 쓰레드를 생성하고 파괴하는 과정인 컨텍스트스위칭에 소비되는 시간을 줄이는 모델


  - 위 그림으로 설명하면 

    ㆍ배(IO)가 들어오게 되면 항구(Completion Port)에 정박하며 정박허가증(Completion Packet) 기록

      ※ Completion Packet에 대한 기록은 Queue에 저장됨

    ㆍ정박허가증(Completion Packet) 기록이 되면 일꾼(Thread)는 항구(Completion Port)로 가게 되고

    ㆍ일꾼(Thread)는 정박허가증(Completion  Packet)기록을 보고 어떤 배(IO)가 정박중인지 확인

    ㆍ일꾼(Thread)는  해당 배(IO)를 향하게 되고 일을 처리한 후

    ㆍ배(IO)의 일이 끝나면 일꾼(Thread)는 쉬러 가던가 아니면 다시 정박허가증(Completion Packet)기록을 보고 해당 배(IO)로 가서 일을 하게 된다.