스레드 풀

Thread pool
대기 작업(파란색)과 완료된 작업(노란색)이 있는 샘플 스레드 풀(녹색 상자)

컴퓨터 프로그래밍에서, 스레드 풀은 컴퓨터 프로그램에서 실행의 동시성을 달성하기 위한 소프트웨어 설계 패턴이다.종종 복제된 작업자 또는 작업자-나사 모델이라고도 불리는 스레드 풀은 감독 프로그램에 의해 동시 실행이 할당되기를 기다리는 여러 개의 스레드를 유지한다.[1]이 모델은 스레드 풀을 유지함으로써 성능을 높이고 단명 작업에 대한 스레드 생성 및 파괴가 빈번해 실행 지연을 방지한다.[2]사용 가능한 스레드 수는 실행 완료 후 병렬 작업 대기열과 같이 프로그램에서 사용할 수 있는 컴퓨팅 리소스에 맞춰 조정된다.

퍼포먼스

스레드 풀의 크기는 태스크를 실행하기 위해 예약되어 있는 스레드 수입니다.이 매개변수는 대개 프로그램 성능을 최적화하도록 조정된 응용프로그램의 조정 가능한 매개변수다.[3]최적의 스레드 풀 크기를 결정하는 것은 성능을 최적화하는 데 매우 중요하다.

각 작업에 대한 새 스레드 생성에 대한 나사산 풀의 한 가지 이점은 스레드 생성 및 파괴 오버헤드가 풀의 초기 생성으로 제한되어 성능이 향상되고 시스템 안정성이 향상될 수 있다는 것이다.쓰레드와 그 관련 자원을 만들고 파괴하는 것은 시간 면에서 비용이 많이 드는 과정이 될 수 있다.그러나 예비 스레드의 수가 너무 많으면 메모리가 낭비되고 실행 가능한 스레드 간의 컨텍스트 전환은 성능 저하를 불러온다.다른 네트워크 호스트에 대한 소켓 연결은 여러 CPU 사이클이 떨어져 재설정에 소요될 수 있으며, 두 개 이상의 네트워크 트랜잭션의 과정에 걸쳐 있는 스레드와 연결함으로써 보다 효율적으로 유지될 수 있다.

스레드 풀 사용은 스레드 시작 시간을 제외하고도 유용할 수 있다.스레드를 수동으로 관리할 때 쉽게 수행할 수 있는 것보다 더 높은 수준에서 작업을 대기열에 넣고 동시성을 제어하며 스레드를 동기화하는 것이 사소한 스레드 풀의 구현이 있다.[4][5]이 경우 사용의 성능 편익은 이차적일 수 있다.

일반적으로 스레드 풀은 단일 시스템에서 실행된다.그러나 스레드 풀은 전체 처리량을 증가시키기 위해 스레드 풀 자체일 수 있는 마스터 프로세스가 서로 다른 컴퓨터의 작업자 프로세스에 태스크를 배포하는 서버 팜과 개념적으로 관련이 있다.당황스러울 정도로 평행한 문제들은 이 접근방식에 매우 순응할 수 있다.[citation needed]

스레드 수는 대기 작업 수에 따라 응용프로그램 수명 동안 동적으로 조정될 수 있다.예를 들어, 웹 서버는 수많은 웹 페이지 요청이 들어오면 스레드를 추가할 수 있으며 요청이 줄어들면 스레드를 제거할 수 있다.[disputed ]더 큰 스레드 풀을 갖는 데 드는 비용은 리소스 사용 증가다.스레드를 만들거나 파괴할 시기를 결정하는 데 사용되는 알고리즘은 전체 성능에 영향을 미친다.

  • 너무 많은 스레드를 만들면 자원이 낭비되고 사용되지 않는 스레드를 만드는 데 시간이 걸린다.
  • 너무 많은 스레드를 파괴하려면 나중에 스레드를 다시 만들 때 더 많은 시간이 필요하다.
  • 스레드를 너무 느리게 만들면 클라이언트 성능이 저하될 수 있음(긴 대기 시간)
  • 스레드를 너무 느리게 파괴하면 다른 자원의 과정이 굶어 죽을 수도 있다.

참고 항목

참조

  1. ^ Garg, Rajat P. & Sharapov, 애플리케이션 최적화를 위한 일리야 기술 - 고성능 컴퓨팅 프렌티스 홀 2002, 페이지 394
  2. ^ Holub, Allen (2000). Taming Java Threads. Apress. p. 209.
  3. ^ Yibei Ling; Tracy Mullen; Xiaola Lin (April 2000). "Analysis of optimal thread pool size". ACM SIGOPS Operating Systems Review. 34 (2): 42–55. doi:10.1145/346152.346320. S2CID 14048829.
  4. ^ "QThreadPool Class Qt Core 5.13.1".
  5. ^ "GitHub - vit-vit/CTPL: Modern and efficient C++ Thread Pool Library". 2019-09-24.

외부 링크