본문 바로가기

[네트워크 기초]

Windows에서 사용되는 I/O모델: Select 모델과 IOCP

1. I/O 모델 개요

I/O 모델은 프로그램이 파일 I/O, 네트워크 I/O와 같은 다양한 채널을 통해 데이터를 송수신하는 방법이다. 이를 통해 효율적인 데이터 처리를 구현할 수 있다. Windows에서는 여러 가지 I/O 모델이 존재하는데, 그 중에서 Select 모델과 IOCP가 많이 사용된다.

2. Select 모델

Select 모델은 주로 네트워크 소켓의 상태를 모니터링하는 데 사용된다. 이 모델은 여러 소켓을 동시에 감시할 수 있으며, 하나 이상의 소켓에서 이벤트가 발생하면 응답할 수 있다.

Select 모델의 동작 원리

  1. 소켓 생성: 여러 개의 소켓을 생성한다.
  2. FD_SET 구성: 감시할 소켓들을 FD_SET 구조체에 추가한다.
  3. Select 호출: select() 함수를 호출하여 이벤트를 감시한다.
  4. 이벤트 처리: 이벤트가 발생한 소켓에 대해 데이터를 송수신한다.
  5. 반복: 위 과정을 반복한다.

장점

  • 간단한 구현
  • 여러 소켓을 동시에 감시 가능

단점

  • 많은 소켓을 감시할 때 성능 저하
  • 이벤트 발생 시 모든 소켓을 순차적으로 검사해야 함

3. IOCP (I/O Completion Ports)

IOCP는 Windows에서 고성능 비동기 I/O 작업을 처리하기 위해 설계된 모델이다. 많은 수의 I/O 작업을 효율적으로 처리할 수 있어 서버 애플리케이션에서 많이 사용된다.

IOCP의 동작 원리

  1. IOCP 생성: CreateIoCompletionPort() 함수를 호출하여 IOCP를 생성한다.
  2. 소켓 연결: 소켓을 IOCP에 연결한다.
  3. 비동기 I/O 요청: WSARecv(), WSASend() 등의 비동기 I/O 함수를 호출하여 I/O 작업을 요청한다.
  4. I/O 완료 패킷 큐잉: I/O 작업이 완료되면 결과가 IOCP에 큐잉된다.
  5. GetQueuedCompletionStatus() 호출: 큐에 있는 완료된 I/O 작업을 처리한다.
  6. 이벤트 처리: 완료된 I/O 작업에 대한 이벤트를 처리한다.

장점

  • 높은 성능과 확장성
  • 많은 수의 I/O 작업을 효율적으로 처리
  • 스레드 풀을 사용하여 최적의 스레드 수 유지

단점

  • 상대적으로 복잡한 구현
  • 시스템 자원 소모

4. Select 모델과 IOCP 비교

  • 성능: IOCP는 많은 수의 I/O 작업을 효율적으로 처리할 수 있어 Select 모델보다 높은 성능을 보인다.
  • 확장성: IOCP는 확장성이 뛰어나 많은 클라이언트를 처리할 수 있다.
  • 복잡성: IOCP는 Select 모델보다 구현이 복잡하다.

5. IOCP 동작 순서도

아래는 IOCP의 동작 순서를 나타낸 그림이다..

  1. IOCP 생성: CreateIoCompletionPort() 호출
  2. 소켓 연결: 소켓을 IOCP에 연결
  3. 비동기 I/O 요청: WSARecv(), WSASend() 호출
  4. I/O 완료 패킷 큐잉: I/O 작업 완료 시 IOCP에 큐잉
  5. GetQueuedCompletionStatus() 호출: 완료된 I/O 작업 처리
  6. 이벤트 처리: 완료된 I/O 작업에 대한 이벤트 처리

결론

Windows에서 IOCP는 높은 성능과 확장성을 제공하여 많은 수의 I/O 작업을 효율적으로 처리할 수 있기 때문에 Select 모델보다 선호된다. Select 모델은 간단하게 구현할 수 있지만, 많은 소켓을 처리할 때 성능이 저하되는 단점이 있다. 반면, IOCP는 복잡한 구현이 필요하지만, 대규모 네트워크 애플리케이션에서 뛰어난 성능을 발휘한다.

'[네트워크 기초]' 카테고리의 다른 글

웹 소켓?  (0) 2024.06.10
HTTP와 TCP, 웹 소켓  (0) 2024.06.10
서브넷 마스크, IP주소, 라우터와 라우팅  (0) 2024.05.29
네트워크 계층  (0) 2024.05.27
물리 계층과 데이터 계층  (0) 2024.05.22