스레드 풀
Thread pool컴퓨터 프로그래밍에서, 스레드 풀은 컴퓨터 프로그램에서 실행의 동시성을 달성하기 위한 소프트웨어 설계 패턴이다.종종 복제된 작업자 또는 작업자-나사 모델이라고도 불리는 스레드 풀은 감독 프로그램에 의해 동시 실행이 할당되기를 기다리는 여러 개의 스레드를 유지한다.[1]이 모델은 스레드 풀을 유지함으로써 성능을 높이고 단명 작업에 대한 스레드 생성 및 파괴가 빈번해 실행 지연을 방지한다.[2]사용 가능한 스레드 수는 실행 완료 후 병렬 작업 대기열과 같이 프로그램에서 사용할 수 있는 컴퓨팅 리소스에 맞춰 조정된다.
퍼포먼스
스레드 풀의 크기는 태스크를 실행하기 위해 예약되어 있는 스레드 수입니다.이 매개변수는 대개 프로그램 성능을 최적화하도록 조정된 응용프로그램의 조정 가능한 매개변수다.[3]최적의 스레드 풀 크기를 결정하는 것은 성능을 최적화하는 데 매우 중요하다.
각 작업에 대한 새 스레드 생성에 대한 나사산 풀의 한 가지 이점은 스레드 생성 및 파괴 오버헤드가 풀의 초기 생성으로 제한되어 성능이 향상되고 시스템 안정성이 향상될 수 있다는 것이다.쓰레드와 그 관련 자원을 만들고 파괴하는 것은 시간 면에서 비용이 많이 드는 과정이 될 수 있다.그러나 예비 스레드의 수가 너무 많으면 메모리가 낭비되고 실행 가능한 스레드 간의 컨텍스트 전환은 성능 저하를 불러온다.다른 네트워크 호스트에 대한 소켓 연결은 여러 CPU 사이클이 떨어져 재설정에 소요될 수 있으며, 두 개 이상의 네트워크 트랜잭션의 과정에 걸쳐 있는 스레드와 연결함으로써 보다 효율적으로 유지될 수 있다.
스레드 풀 사용은 스레드 시작 시간을 제외하고도 유용할 수 있다.스레드를 수동으로 관리할 때 쉽게 수행할 수 있는 것보다 더 높은 수준에서 작업을 대기열에 넣고 동시성을 제어하며 스레드를 동기화하는 것이 사소한 스레드 풀의 구현이 있다.[4][5]이 경우 사용의 성능 편익은 이차적일 수 있다.
일반적으로 스레드 풀은 단일 시스템에서 실행된다.그러나 스레드 풀은 전체 처리량을 증가시키기 위해 스레드 풀 자체일 수 있는 마스터 프로세스가 서로 다른 컴퓨터의 작업자 프로세스에 태스크를 배포하는 서버 팜과 개념적으로 관련이 있다.당황스러울 정도로 평행한 문제들은 이 접근방식에 매우 순응할 수 있다.[citation needed]
스레드 수는 대기 작업 수에 따라 응용프로그램 수명 동안 동적으로 조정될 수 있다.예를 들어, 웹 서버는 수많은 웹 페이지 요청이 들어오면 스레드를 추가할 수 있으며 요청이 줄어들면 스레드를 제거할 수 있다.[disputed ]더 큰 스레드 풀을 갖는 데 드는 비용은 리소스 사용 증가다.스레드를 만들거나 파괴할 시기를 결정하는 데 사용되는 알고리즘은 전체 성능에 영향을 미친다.
- 너무 많은 스레드를 만들면 자원이 낭비되고 사용되지 않는 스레드를 만드는 데 시간이 걸린다.
- 너무 많은 스레드를 파괴하려면 나중에 스레드를 다시 만들 때 더 많은 시간이 필요하다.
- 스레드를 너무 느리게 만들면 클라이언트 성능이 저하될 수 있음(긴 대기 시간)
- 스레드를 너무 느리게 파괴하면 다른 자원의 과정이 굶어 죽을 수도 있다.
참고 항목
참조
- ^ Garg, Rajat P. & Sharapov, 애플리케이션 최적화를 위한 일리야 기술 - 고성능 컴퓨팅 프렌티스 홀 2002, 페이지 394
- ^ Holub, Allen (2000). Taming Java Threads. Apress. p. 209.
- ^ 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.
- ^ "QThreadPool Class Qt Core 5.13.1".
- ^ "GitHub - vit-vit/CTPL: Modern and efficient C++ Thread Pool Library". 2019-09-24.
외부 링크
- 비닐다스 C의 "조각별 쿼리, 병렬 실행 및 조인: 자바의 스레드 풀 패턴"a
- 브라이언 괴츠의 "스레드 풀과 작업 대기열"
- 프라데프 쿠마르 사후의 "작업자 나사산 풀링 방법
- Uri Twig의 "Work Queue": 작업 대기열을 실행하는 풀링된 스레드의 C++ 코드 시연.
- "Windows 스레드 풀링 및 실행 체인"
- 아미바의 "스마트 스레드 풀"
- "에서 스레드 풀 프로그래밍 중.NET Framework" by David Carmona
- Amir Kirsh의 "Java에 알림 차단 스레드 풀 생성"
- "Practical Threaded Programming with Python: 노아 기프트의 스레드 풀과 큐"
- Irfan Pyarali, Marina Spivak, Douglas C의 "Real-Time CORBA를 위한 스레드 풀 전략 최적화" 슈미트와 론 사이트론
- "취소취소. 필립 바흐만의 행동 패턴"
- Barak Shoshany의 "고성능 과학 컴퓨팅용 C++17 스레드 풀"