1 분 소요

IOCP(input output completion port)란?

WINDOWS 운영체제에서 비동기 I/O 작업의 효율적인 처리를 위해 제공하는 고성능 I/O 모델, 논블로킹 프로세스로서 최소한의 스레드를 사용하여 port와 관련된 입출력을 처리하는 기법(ois 7계층의 전송 계층과 연관이 있음)

  • 비동기 처리 : 요청과 응답이 비동기로 이루어지며, 작업 완료 시점에만 알림을 받는다.
  • 멀티스레드 모델 : 스레드 풀을 사용하여 시스템 리소스를 효율적으로 관리함

장점

  1. 적은 수의 스레드를 사용하여 구현할 수 있다.
  2. 스레드를 적게 사용하기 때문에 cpu 점유율이 낮다.
  3. 커널 영역과 유저 영역의 버퍼를 공유한다.

단점

  1. 프로그램 구현이 복잡해진다.
  2. windows 기반 플랫폼에서만 사용이 가능하다
  3. 하나의 I/O operation(소켓 등) 마다 버퍼 영역에 대한 page-lock/unlock이 필요하다

필수 개념

  1. I/O 완료 포트(Completion port)

    windows 커널 객체로, 완료된 I/O 작업 정보를 큐 형태로 관리함.
    비동기 I/O작업이 완료되면 관련 정보가 여기에 저장됨
    스레드 풀링과 Queue 매커니점을 동시에 사용함.

    • 스레드 풀링
      1. 풀(pool)이란 집합소, 데이터 등을 모아놓은 걸 의미한다. 스레드풀은 프로그램이 시작할 때 여러 개의 스레드를 대기 상태로 생성해 놓은 것을 뜻한다.
      1. 스레드 풀링을 통해 CPU 소모를 줄일 수 있다.
      1. 다 사용하 스레드를 파괴하지 않고 대기 상태로 바꿔 스레드 풀에 널어 놓는다(DNS 캐시처럼 캐시로써 기록한다는 느낌으로 접근해보자.)
      1. 스레드에서 다른 스레드로 다른 작업 전환을 할 때는 컨텍스트 스위칭(Context switching)이 일어나는데 이 과정은 CPU 소모를 많이 한다.
  2. 비동기 I/0

    작업 요청 후 완료되기 전까지 차단되지 않고 다른 작업을 진핼 수 있는 I/O 방식 ReadFile,WriteFile 같은 API와 함께 사용됨

  3. OVERLAPPED IO

nonblocking과 비동기 I/O 처리가 합쳐진 개념
작업이 완료되면 완료 포트로 결과를 전송한다.

  1. 핸들 등록

IOCP를 사용하려면 파일, 소켓 등의 핸들을 완료 포트에 연결해야 한다.

  1. page-lock/unlock

    page-lock(페이지 잠금)은 메모리 페이지를 물리적 메모리에 고정하는 작업이며, 운영체제에서 보통 관리한다.
    운영체제는 메모리를 효율적으로 관리하기 위해 가상 메모리를 사용하고 그에 따라 페이지를 디스크로 스왑한다.
    I/O 작업 중에 스왑이 발생하면 성능 문제가 생길 수 있으므로 특정 메모리 페이지를 물리 메모리(RAM)에 고정시켜야 한다.
    고정된 메모리를 푸는 것을 (page-unlock)이라 함.

파생 학습 주제

  1. windows API
  • IOCP는 windows API를 기반으로 동작하므로 해당 API의 사용법을 익히면 좋다.
  1. 소켓 프로그래밍

  2. 멀티스레드 프로그래밍