TIL

IOCP

explosion149 2024. 12. 24.

IOCP

IOCP는 Window 환경에서 작동하는 제일 흔히 쓰이는 논 블로킹 프로세스이다.

최소한의 쓰레드로 최대한의 효율을 뽑을 수 있다.

IOCP는 IO Completion Port의 약자로 입출력 완료 포트라는 뜻이다.

여기서 사용하는 Port는 통신에서 사용하는 포트와 비슷한 의미로 어떤 항구, 그러니깐 목적지라는 의미이다.

하지만 직접적으로 통신에서 사용하는 포트와는 전혀 다른 포트로 처음 공부할 때는 혼란이 올수 있다.

논 블로킹이란 무엇인가?

블로킹 vs 논 블로킹

처리되어야 하는 작업이, 전체적인 작업 '흐름' 을 막느냐 안막느냐에 대한 관점

제어권이 누구한테 있는것느냐의 관심

블록킹(Blocking)

자신의 작업을 진행하다가 다른 주체의 작업이 시작되면 다른 작업이 끝날 때까지 기다렸다가 자신의 작업을 시작하는 것

논 블록킹(Non-Blocking)

다른 주체의 작업에 관련없이 자신의 작업을 하는 것

블로킹


IOCP는 최소한의 쓰레드로 최대한의 효율을 생성하는데 보통 쓰레드 폴(미리 쓰레드를 할당) 을 이용하여 생성한다.

출처 : https://developstudy.tistory.com/43

1. 비동기 I/O 시작

동기 함수(Connect Close Accept Send)과 같은 역활을 하는 비동기 함수들을 실행해서 윈도우 I/O에 남긴다. 이 동작을 거친 뒤에는 프로그램의 흐름이 다시 호출한 쓰레드로 바로 돌아온다. (비동기)

2. 비동기 입출력 완료

비동기 입출력이 윈도우 I/O에서 종료되면 IOCP라는 Port(항구)에 쌓이는데 이 쌓이는 자료구조는 Queue(IOCP Queue) 이다.

3. GetQueuedCompletionStatus

쓰레드 중에서 작업이 끝난, 할 일이 없는 쓰레드에서 GetQueuedCompletionStatus를 호출하면 IOCP에서 완료된 내용을 꺼내 받을 수 있다.

1. 작업자 쓰레드(Worker Thread)

[IOCP 흐름] 그림에서 여러 개의 쓰레드가 존재하는데 IOCP에서는쓰레드를 작업자 쓰레드라고 부른다.

2. Overlapped

Overlapped는 본래 IOCP가 아닌 Overlapped 모델에서 사용하는 구조체이다.

이 구조체를 이해하기 위해서는 Overlapped 모델에 대한 설명을 한번 읽어보는 것이 좋다.

출처 : https://developstudy.tistory.com/43

'TIL' 카테고리의 다른 글

TIL_2024-12-24  (0) 2024.12.25
TIL_2024-12-23  (0) 2024.12.24
TIL_2024-12-20  (0) 2024.12.21
OSI 전송계층  (0) 2024.12.20
TIL_2024-12-19  (0) 2024.12.20

댓글

💲 추천 글