공부

IOCP에 대해서

pyupyu 2023. 1. 29. 21:05

Overlapped IO란?

 

Overlapped 객체를 인자로 가지고 작업을 수행하는데, 작업이 끝날 때까지 기다리지 않고 바로 리턴을 한다. 이후 이 작업이 다 끝나고 나면 이벤트나 콜백을 통해 해당 작업의 종료 여부를 알 수 있다 ( 비동기 IO )

 

 

 

IOCP란?

IO Completion Port의 약자로 윈도우에서 작동하는 논블록 프로세스로 최소한의 스레드를 사용해서 Port와 관련된 입출력을 처리하며 Overlapped I/O가 완료되면 이를 감지해서 사용자에게 알려주는 기법이다.

 

위의 그림처럼 5개의 IOCP 구조체가 존재한다.

IOCP내에 등록되어 있는 장치들의 작업들이 끝나거나 PostQueuedCompletionStatus가 불리게 되면 대기 스레드 큐에서 대기하고 있던 스레드들이 릴리즈 스레드 리스트로 불려 작업을 수행하게 되고 작업을 종료하고 나면 GetQueuedCompletionStatus를 불러 다시 대기 스레드 큐로 내려가 대기를 하게 된다.

대기 스레드 큐는 LIFO로 작동하게 되는데, 쓴 스레드를 최대한 계속 쓰는 과정을 통해서 context switching에 대한 비용을 없애기 위해서 LIFO로 작동을 한다. 예를 들어 A스레드가 릴리즈-대기-릴리즈로 가게 되면 context switching이 발생하지 않지만, 릴리즈-대기-릴리즈(B)가 되면 context switching이 발생하게 된다.