스레드 풀이란 무엇인가요? 왜 스레드 풀을 사용하나요? 스레드 풀은 어떻게 사용하나요?
1. 스레드 풀이란 무엇인가요?
.NET 프레임워크의 ThreadPool 클래스는 작업 실행, 작업 항목 전송, 비동기 I/O 처리, 다른 스레드를 대기하고 타이머를 처리하는 데 사용할 수 있는 스레드 풀을 제공합니다. 그렇다면 스레드 풀이란 무엇일까요? 스레드 풀은 실제로 스레드 객체를 저장하는 '풀'이며, 풀 내 최소 및 최대 스레드 수를 설정하거나 실행할 메서드를 큐잉하는 등의 기본 메서드를 제공합니다. ThreadPool은 정적 클래스이므로 객체를 생성하지 않고도 직접 사용할 수 있습니다.
2. 왜 스레드 풀을 사용하나요? 이점은 무엇인가요?
마이크로소프트 공식 웹사이트에는 다음과 같이 나와 있습니다: 많은 애플리케이션이 이벤트 발생을 기다리며 잠든 상태의 많은 스레드를 생성합니다. 또한 주기적으로 깨어나 변경 또는 업데이트된 상태 정보를 폴링하기 위해 휴전 모드에 들어가는 스레드도 많습니다. 스레드 풀을 통해 시스템이 관리하는 워커 스레드 풀을 통해 스레드를 더 효율적으로 사용할 수 있게 해줍니다.
간단히 말해, 모든 새 스레드는 메모리 공간과 다른 자원을 차지해야 하며, 너무 많은 새 스레드가 있어서 많은 스레드가 휴면 상태이거나 자원이 해제되기를 기다리고 있습니다. 데이터 새로고침 등 주기적으로 작은 작업만 하는 스레드가 많아 너무 낭비적이고, 실제 프로그래밍에서 많은 수의 스레드가 갑자기 발생해 짧은 시간 내에 끝나는 경우도 드뭅니다. 따라서 스레드 풀 개념이 제안되었습니다. 애플리케이션이 스레드 풀에 다시 요청을 하면, 대기 중인 스레드가 활성화되어 새 스레드를 생성하지 않고 작업을 실행하여 많은 오버헤드를 절감합니다. 시스템은 스레드 수가 최대 스레드 수에 도달했을 때만 자동으로 스레드를 파괴합니다. 따라서 스레드 풀을 사용하면 큰 생성 및 폐기 비용을 피할 수 있고, 성능과 안정성이 향상되며, 둘째로 개발자가 스레드를 시스템 관리에 넘겨 다른 작업에 집중할 수 있습니다.
3. 스레드 풀은 어떻게 사용하나요?
실제로 스레드 풀은 다음과 같이 매우 간단하게 사용할 수 있습니다
a. 최대 스레드 풀과 최소 스레드 풀 설정:
ThreadPool.SetMaxThreads (int workerThreads, int completionPortThreads) 동시에 활성화될 수 있는 스레드 풀의 요청 수를 설정합니다. 이 수보다 큰 모든 요청은 스레드 풀 스레드가 사용 가능해질 때까지 대기열에 남아 있습니다. 최소 스레드 수를 설정할 수도 있습니다.
b. 스레드 풀에 작업 추가:
ThreadPool.QueueUserWorkItem(new WaitCallback(메서드 이름));
또는 ThreadPool.QueueUserWorkItem(new WaitCallback(메서드 이름), parameter);
예를 들어, 스레드 풀에서 최대 5개의 스레드가 메서드를 60번 실행한다면, 5년간의 총 급여는 다음과 같습니다:
스레드 풀링을 사용하지 않으면 Run() 메서드를 비동기적으로 실행하려면 60개의 스레드를 열어야 할 수도 있는데, 이는 공간 자원 낭비입니다. 이제 최대 5개의 스레드를 사용하며, 1초 만에 실행할 수 있고, 효율성과 성능이 매우 우수합니다.
|