개발자 면접 공부/네트워크&DB

IOCP 서버

chogyujin 2022. 8. 16. 22:51
728x90

오늘은 IOCP서버에 대해 알아보겠습니다.


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://www.joinc.co.kr/w/Site/win_network_prog/doc/overlapped

 

Overlapped I/O 모델

Overlapped I/O 모델소켓은 기본적으로 봉쇄/동기로 만들어진다. 이 모델은 데이터 입출력 부분에서 봉쇄(blocked)된다는 문제점을 가진다.이 모델로는 하나의 쓰레드에서 두 개 이상의 소켓을 다루기

www.joinc.co.kr

 

간단히 표현하자면 아래와 같다.

 

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


Reference

https://developstudy.tistory.com/43

 

C++ IOCP 서버 2. IOCP 이론

* 아직 배우고 있는 학생이라 틀린 내용이 있을 수도 있습니다. 틀린 내용이 있다면 알려주시면 감사하겠습니다. IOCP는 Window 환경에서 작동하는 제일 흔히 쓰이는 논블로킹 프로세스이다. 최소

developstudy.tistory.com