IOCP

이상현·2024년 10월 16일

[ TIL ]

목록 보기
27/38

IOCP

I/O Completion Port

IOCP란?

  • 소켓이나 파일의 입출력을 최소한의 스레드를 사용해서 처
    리하는 기법

이를 위한 스레드 풀링이나 비동기 처리등을 운영체제에서 관리해주
기 때문에 사용자는 IOCP를 이용해서 쉽고 빠르게 고성능의 입출력
처리가 가능해진다.

ICOP의 장점

  • 스레드 풀(Thread Pool)을 쉽게 사용할 수 있다.
    (운영체제가 직접 스레드 풀링 관리)
  • 스레드를 효율적으로 사용하므로 CPU 자원소모가
    줄어든다.
  • Context Switching 비용이 줄어든다.
  • winsock2 API 중에서 확장성과 성능이 뛰어나다

IOCP의 작동 방식

  1. 완료 포트 생성
  2. 파일 핸들 또는 소켓 핸들 연결
  3. 비동기 I/O 요청 제출
  4. 작업 완료 통지
  5. 대기 중인 스레드가 큐에서 작업을 가져옴
  6. 작업 처리 및 콜백 실행

1. 완료 포트 생성

완료 포트 생성 (Create Completion Port)

  • IOCP(Input/Output Completion Port)를 생성하는 단계입니다.
    완료 포트는 비동기 I/O 작업의 완료를 통지 받기 위한 큐 역할을 합니다.
    이 포트는 비동기 I/O 요청이 완료될 때마다 완료된 작업의 정보를 관리합니다.
    - 스레드가 작업을 처리할 수 있도록 합니다. 비동기 I/O 작업은 작업을 요청한 후 그 작업이 완료될 때까지 기다리지 않고, 요청한 프로그램이 다른 작업을 계속할 수 있는 방식.

2. 파일 핸들 또는 소켓 핸들 연결

  • 생성한 IOCP에 특정 파일 핸들이나 소켓 핸들을 연결하는
    과정입니다.
  • 이를 통해 해당 핸들에 대한 비동기 I/O 작업이 완료되면
    IOCP가 이를 관리하게 됩니다.
    - 핸들: 파일 핸들이나 소켓 핸들은 운영 체제에서 특정 자원을 식별하는 데 사용되는 참조값입니다.

3. 비동기 I/O 요청 제출

  • 비동기 방식으로 데이터를 읽거나 쓰는 등의 I/O 작업을 요청하는 과정입니다. 비동기 I/O 요청을 제출하면 작업이 백그라운드에서 처리되며, 작업이 완료될 때까지 애플리케이션은 기다릴 필요 없이 다른 작업을 수행할 수 있습니다.

4. 작업 완료 통지

  • 제출한 비동기 I/O 작업이 완료되면, 운영 체제는 해당 작업의 결과를 IOCP에 통지합니다. 이때 완료된 작업의 정보가 완료 포트 큐에 추가됩니다.

5. 대기중인 스레드가 큐에서 작업을 가져옴

  • IOCP에 연결된 스레드 풀의 스레드가 GetQueuedCompletionStatus 함수 등을 통해 큐에서 완료된 I/O 작업을 가져오는 단계입니다. 이 함수는 완료된 작업이 큐에 추가될 때까지 블로킹 상태로 대기할 수 있습니다.
    • 대기 상태: 스레드가 작업을 기다리고 있는 상태를 의미하며, I/O 작업이 완료 되면 그 작업을 처리하기 위해 즉시 깨어납니다.

6. 작업 처리 및 콜백 실행

완료된 I/O 작업을 처리하는 단계로, 애플리케이션은 작업의 결과를 기반으로 필요한 후속 작업을 수행합니다. 이를 위해 콜백 함수를 실행하거나 작업 완료에 대한 이벤트를 처리할 수 있습니다.

profile
Node.js_6기

0개의 댓글