Study/TIL(Today I Learned)

24.06.17 서버

에린_1 2024. 6. 17. 22:56
728x90

서버

스레드 풀(Thread Pool)

  • 여러 스레드를 미리 생성해 두고, 작업이 들어올 때마다 그 중 하나를 할당하여 작업을 처리하는 방식이다.
  • 스레드 생성 및 소멸의 오버헤드를 줄이고, 시스템 리소스를 보다 효율적으로 사용할 수 있다.
  • 스레드 풀은 병렬 처리와 동시성을 향상시키는 데 중요한 역할을 한다.

주요 개념

  1. 스레드 풀의 구조
    • 스레드 풀 관리자
      • 스레드 풀을 관리하는 컴포넌트로, 스레드의 생성, 소멸, 할당을 책임진다.
    • 작업 큐
      • 처리할 작업들이 대기하는 큐이다.
      • 작업이 도착하면 이 큐에 추가되고, 풀에 있는 스레드가 이를 가져와 처리한다.
    • 워커 스레드(Worker Threads)
      • 실제 작업을 수행하는 스레드들이다.
      • 일정 수의 스레드가 미리 생성되어 풀에 대기한다.
  2. 작동 원리
    • 초기화
      • 프로그램 시작 시 일정 수의 스레드를 미리 생성하여 풀에 넣어 둔다.
    • 작업 제출
      • 새로운 작업이 발생하면 이를 작업 큐에 추가한다.
    • 작업 처리
      • 풀에 대기 중인 스레드가 작업 큐에서 작업을 가져와 처리한다.
      • 작업이 완료되면 해당 스레드는 다시 풀에 반환되어 다음 작업을 기다린다.
    • 동적 조절
      • 작업량에 따라 스레드 풀의 크기를 동적으로 조절할 수 있다.
      • 필요 시 새로운 스레드를 추가로 생성하거나, 필요하지 않은 스레드를 종료할 수 있다.
  3. 장점
    • 성능 향상
      • 스레드를 미리 생성해 두어 스레드 생성과 소멸에 따른 오버헤드를 줄인다.
    • 자원 절약
      • 스레드 개수를 제한하여 시스템 자원의 남용을 방지한다.
    • 간단한 동시성 처리
      • 개발자가 직접 스레드를 관리하지 않고 스레드 풀에 작업을 제출함으로써 동시성을 간단하게 처리할 수 있다.
  4. 단점
    • 복잡성 증가
      • 스레드 풀 관리 로직이 추가되면서 프로그램의 복잡성이 증가할 수 있다.
    • 오버헤드
      • 스레드 풀을 관리하기 위한 추가적인 오버헤드가 발생할 수 있다.
    • 자원 한계
      • 너무 많은 스레드를 생성하면 오히려 시스템 성능이 저하될 수 있다.

입출력 완료 포트(I/O Completion Port,IOCP)

  • Windows 운영 체제에서 고성능 비동기 입출력(I/O)을 처리하기 위한 기술이다.
  • 네트워크 서버와 같은 대규모 입출력 작업을 효율적으로 처리하기 위해 사용된다.
  • IOCP는 스레드 풀과 결합하여 높은 동시성을 제공하며, 이를 통해 CPU 자원을 효율적으로 활용한다.

1. 기본 개념

  • Completion Port
    • IOCP의 중심 개념으로, 입출력 작업이 완료될 때 이를 비동기적으로 처리할 수 있게 해준다.
  • Overlapped I/O
    • 비동기 입출력 작업을 가능하게 하는 Windows의 메커니즘이다.
    • 입출력 작업을 시작한 후, 해당 작업이 완료될 때까지 기다리지 않고, 나중에 완료 통지를 받는다.
  • Worker Threads
    • IOCP와 연동되는 스레드들로, 입출력 작업이 완료되면 이를 처리한다.

2. 장점

  • 고성능
    • 동시성 처리와 스레드 풀을 통한 효율적인 CPU 자원 사용으로 매우 높은 성능을 제공한다.
  • 확장성
    • 많은 수의 클라이언트와 연결된 서버에서도 안정적이고 효율적 입출력 처리가 가능하다
  • 비동기 처리
    • 입출력 작업이 비동기로 처리되어 다른 작업을 수행하는 동안 입출력 작업을 병렬로 수행할 수 있다.
728x90

'Study > TIL(Today I Learned)' 카테고리의 다른 글

24.06.19 네트워크  (2) 2024.06.19
24.06.18 면접  (2) 2024.06.18
24.06.16 CS  (1) 2024.06.17
24.06.15 CS  (0) 2024.06.17
24.06.14 C++  (0) 2024.06.16