I/O Completion Port 모델 ![]() ![]()
|
Completion Port 는 Overlapped I/O 에 쓰레드 풀링(ThreadPooling ) 과 Queue라는 메커니즘을 동시에 접목시킨 기술이라고 할 수 있다.
- CreateCompletionPort를 이용해 socket 과 CompletionKey를 CompletionPort라는 객체를 등록시킴
- 완료된 작업을 받을때는 GetQueueCompletionStatus() 함수를 이용
Overlapped I/O 모델에서는 볼수 없었던 자료 구조와 매커니즘이 추가.
- CreateIOCompletionPort()함수를 이용해 CompletionPort 객체에 등록한 socket 과 CompletionPort 객체를 관리하는 DeviceList 라는 자료구조의 추가이다.
- IOCP Queue(I/O Completion Port Queue ) 라는 자료 구조 추가.
Overlapped 모델과는 다르게 I/O작업이 완료되었을때 곧바로 사용자에게 알리지 않고완료된 작업결과를 IOCP Queue에 넣은 후 Completion port 객체를 이용해 사용자에게 알림. - 커널은 쓰레드풀링 매커니즘을 이용해 사용자에게 알린다.
커널은 쓰레드 풀링 매커니즘을 이용하여 IOCP Queue에서 완료된 Overlapped I/O 작업을 가져와 뒤처리
+ Overlapped IO 모델에서 IOCP 모델로
- Overapped IO 모델의 에코 서버는 "NON-BLOCKING 모드의 accept 함수와 alertable wait 상태로이 진입을 위한 SleepEX 함수가 번갈아 가며 반복 호출되는 것은 성능에 영향을 미칠수 있다"
- accept 함수 호출은 main 스레드가 처리하도록 하고 , 별도의 스레드를 추가로 하나 생성해서 클라이언트 와의 입출력을 담당하게 된다.
- CompletionPort 의 생성
- 완료된 IO 의 정보가 Completion Port 오브젝트라는 커널 오브젝트에 등록.
- Completion Port 의 생성
- Completion Port 오브젝트와 소켓의 연결
'SYSTEM PROGRAMMING' 카테고리의 다른 글
C# 문법 특징 (0) | 2015.08.05 |
---|---|
Loop through files (Recurse subfolders) (0) | 2015.08.05 |
윈도우즈 기반 I/O 모델 (0) | 2015.08.05 |
세마포어(Semaphore) 기반의 동기화 (0) | 2015.08.05 |
Mutex 기반 동기화 (0) | 2015.08.05 |