#11 TIL - CS Window I/O_ Select 모델

X's Dev·2024년 5월 28일
0

TIL

목록 보기
11/38

Windows 와 같은 운영체제에서 입출력(Input,Output, I/O) 성능은 운영체제 애플리케이션의 전반적인 성능에 큰 영향을 미친다. I/O처리가 효율적으로 되지 않는다면 고성능 서버나 많은 요청을 처리해야하는 클라이언트에서 문제가 발생할 수 있기 때문이다.

이에 Windows 운영 체제에서는 다양한 I/O 모델을 제공하여 개발자가 다양한 요구사항에 맞춰 최적의 성능을 발휘할 수 있도록 한다.

이번 TIL에서는 Windows의 두가지 주요 I/O 모델인 Select 모델과 I/O Completion Ports (IOCP)에 대해 다루려고 한다.

두 모델은 각각의 상황에서 최적의 성능을 발휘할 수 있도록 설계되었는데, Select 모델은 상대적으로 간단한 구현으로 소규모 프로젝트에서 유용하여 많이 사용되며, IOCP는 다양한 입출력처리와 고성능이 요구되는 대규모 시스템에 적합하여 많이 사용된다.

Select 모델

Select 모델은 I/O 다중화(multiplexing) 기술의 하나로, 여러 파일 디스크립터를 모니터링하여 어느 하나라도 읽기, 쓰기, 혹은 예외 상황이 발생하면 이를 감지하고 처리하는 모델이다.

이 모델은 특히 Unix 계열 운영 체제에서 널리 사용되며, Windows에서는 Winsock API의 select 함수를 통해 지원된다.

특징

  • 비차단 I/O : 작업이 완료될 때까지 대기하지않고, 여러 I/O 요청을 한꺼번에 처리할 수 있다.
  • 안정성과 단순함 : 간단한 구현으로 소규모 시스템에서 효과적이고, 오래 사용된 방식으로 안정성이 높다.

장점

  • 소규모 프로젝트에 유용
  • 다중 I/O 지원 : 여러 소켓을 동시에 모니터링할 수 있어 네트워크 프로그래밍에 유용하다.

한계

  • 성능 한계 : 많은 수의 파일 디스크립터를 처리할 때 성능이 저하된다. 각 디스크립터를 순차적으로 검사하기 때문에 대규모 시스템에서는 비효율적일 수 있다.

** 디스크립터 : 컴퓨터 프로그래밍 분야에서 파일 서술자(file descriptor) 또는 파일 기술자는 특정한 파일에 접근하기 위한 추상적인 키이다.

  • 스케일링 한계 : select 함수는 호출 시 매번 모든 디스크립터를 검사하므로,대규모 시스템에서는 효율적이지 않으며, 성능 병목 현상이 발생할 수 있다.

사용 사례

  • 소규모 서버 : 소규모 네트워크 서버나 간단한 클라이언트-서버 애플리케이션에서 주로 사용된다. 예를 들어, 간단한 채팅 서버나 소규모 데이터 수집 애플리케이션에서 유용하다.
    - 간단한 채팅 서버에서는 여러 클라이언트로부터의 연결을 동시에 처리해야 한다.
    select 모델을 사용하면 여러 클라이언트 소켓을 모니터링하여 데이터가 들어올 때마다 이를 처리할 수 있다.
    이는 작은 규모의 서버에서는 충분히 효율적이다.

해당 이미지는 Select의 처리 과정이다.

이미지출처 - 윤성우 열혈 TCP/IP 소켓 프로그래밍 강의자료PDF

I/O Completion Ports (IOCP)

개념

I/O Completion Ports (IOCP)는 고성능 비동기 I/O 작업을 처리하기 위해 설계된 Windows의 고급 I/O 모델이다. IOCP는 하나 이상의 I/O 작업이 완료될 때 이를 큐(queue)로 전달하고, 작업 스레드가 이 큐에서 작업을 가져와 처리하는 구조로 동작한다. 이는 특히 고성능 서버와 같이 많은 I/O 작업을 효율적으로 처리해야 하는 상황에 적합하다.

이미지 출처 - https://developstudy.tistory.com/m/43?category=836039

특징

  • 비동기 I/O : 비동기적으로 I/O 작업을 처리하여 높은 성능을 제공한다.

  • 스레드 풀 : IOCP는 스레드 풀을 사용하여 효율적으로 시스템 리소스를 관리한다. 스레드 풀은 시스템 부하에 따라 동적으로 스레드 수를 조절하여 최적의 성능을 유지한다.

  • 높은 확장성 : 대규모 I/O 작업을 처리하는 데 최적화되어 있다.

장점

  • 높은 성능 : 많은 I/O 요청을 효율적으로 처리할 수 있다. 비동기적으로 작동하기 때문에 I/O 작업이 완료될 때까지 대기하지 않아도 된다.

  • 리소스 효율성 : 스레드 풀이 자동으로 최적화되어 CPU 및 메모리 사용을 최소화한다. 이는 특히 CPU 집약적인 작업에서 중요한 이점이다.
    확장성: 많은 수의 I/O 작업을 동시에 처리할 수 있어, 대규모 시스템에서도 성능 저하 없이 동작한다.

한계

  • 윈도우 전용 : Windows 운영체제에서만 사용 가능하므로, 플랫폼 독립적인 애플리케이션에서는 사용이 제한적이다.

사용 사례

  • 고성능 서버 : 고성능 네트워크 서버, 데이터베이스 서버 등 많은 I/O 작업을 처리해야 하는 시스템에서 주로 사용된다. 예를 들어, 대규모 웹 서버, 파일 서버, 게임 서버 등 에서 IOCP를 사용할 수 있다.

    	-데이터베이스 서버 : 고성능이 요구되는 데이터베이스 서버에서 IOCP는 많은 동시 접속 클라이언트의 요청을 효율적으로 처리할 수 있다.
       - 게임 서버 : 실시간 반응이 중요한 온라인 게임 서버에서 IOCP는 수많은 클라이언트의 요청을 지연 없이 처리할 수 있다.

  • 대규모 웹 서버에서는 수천, 수만 명의 사용자가 동시에 접속하여 웹 페이지를 요청한다. IOCP를 사용하면 이러한 많은 요청을 비동기적으로 처리하여 서버의 성능을 극대화할 수 있다.
    예를 들어, 온라인 쇼핑몰 서버는 사용자 검색, 상품 조회, 장바구니 추가 등 많은 I/O 작업을 동시에 처리해야 한다. IOCP를 활용하면 이러한 작업을 효과적으로 분산 처리하여 빠른 응답 속도를 유지할 수 있다.

profile
성장 기록하기

0개의 댓글