[C#] 쓰레드 생성
오브젝트 풀링이란?
미리 생성한 오브젝트를 필요한 순간에 가져다가 사용하는 개념이다.
프로그램 중간에 할당하지 않아 성능상 이점이 있다.
C# 환경에서는 ThreadPool과 Task를 지원하고 있다.
ThreadPool은 인력소 같은 느낌이고, Thread는 고용되서 일하는 Worker라고 볼 수 있다.
Task는 작업해야 하는 업무의 개념이다.
// 쓰레드 생성 기본 코드
static void ThreadBasic()
{
Thread t = new Thread(MainThread);
t.Name = "TestThread";
t.IsBackground = true; // MainThread 종료시 같이 종료된다.
t.Start();
Console.WriteLine("Waiting for thread");
t.Join(); // Thread t가 끝날 때까지 기다린다.
Console.WriteLine("Hello World");
}
Thread Pool.SetMinThreads(1, 1); // 최소 쓰레드
ThreadPool.SetMaxThreads(5, 5); // 맥스 쓰레드
쓰레드 풀에서 가져온 쓰레드에게 loop 처리를 맡기는 경우는 좋지 않다.
Task로 생성하여 ThreadCreationOptions.LongRunning 옵션을 주면, 쓰레드 풀이 아닌 따로 할당한 쓰레드를 활용한다.
Task t = new Task(() => { while (true) { } }, TaskCreationOptions.LongRunning);
t.Start();
// 쓰레드 풀의 쓰레드를 할당한다.
ThreadPool.QueueUserWorkItem(MainThread);