Computer >> 컴퓨터 >  >> 프로그래밍 >> C#

C#에서 스레드가 관리형 스레드 풀에 속하는지 확인하는 방법

현재 실행 중인 스레드가 관리형(managed) 스레드 풀에 속해 있는지 확인하려면 Thread.CurrentThread.IsThreadPoolThread 속성을 사용하면 됩니다. 이 속성은 해당 스레드가 .NET 런타임에서 제공하는 스레드 풀에서 파생된 것인지 여부를 나타내며, 개발자가 직접 생성한 스레드라면 False, 스레드 풀에서 실행 중인 작업이라면 True를 반환합니다.


예제 1: 직접 생성한 스레드의 경우

먼저 new Thread를 통해 직접 생성한 스레드에서 이 속성 값을 확인해 보겠습니다.

using System;
using System.Threading;
public class Demo {
    public static void Main() {
        Thread thread = new Thread(new ThreadStart(demo));
        thread.Start();
    }
    public static void demo() {
        Console.WriteLine("Thread belongs to managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
    }
}

출력 결과

Thread belongs to managed thread pool? = False

위 코드에서는 Thread 클래스의 인스턴스를 새로 만들어 실행했기 때문에, 해당 스레드는 스레드 풀이 아닌 독립적인 스레드입니다. 따라서 False가 출력됩니다.


예제 2: 스레드 풀에서 실행하는 경우

이번에는 ThreadPool.QueueUserWorkItem 메서드를 사용하여 작업을 스레드 풀의 큐에 등록하고 실행해 보겠습니다.

using System;
using System.Threading;
public class Demo {
    public static void Main() {
        ThreadPool.QueueUserWorkItem(new WaitCallback(demo));
    }
    public static void demo(object stateInfo) {
        Console.WriteLine("Thread belongs to managed thread pool? = " + Thread.CurrentThread.IsThreadPoolThread);
    }
}

출력 결과

Thread belongs to managed thread pool? = True

ThreadPool.QueueUserWorkItem은 작업을 스레드 풀의 대기열에 추가하므로, 콜백 메서드는 스레드 풀에서 관리되는 스레드 위에서 실행됩니다. 그 결과 True가 출력되는 것을 확인할 수 있습니다.


정리

IsThreadPoolThread 속성을 활용하면 스레드의 실행 환경을 손쉽게 판별할 수 있습니다. 스레드 풀 스레드는 재사용과 자원 관리가 자동화되어 있어 짧은 비동기 작업에 적합하고, 장시간 실행되거나 특정 우선순위가 필요한 작업에는 별도의 스레드를 생성하는 것이 좋습니다.