본문 바로가기
프로그래밍/Game Dev

[C#] 쓰레드 생성

by YuminK 2023. 8. 26.

오브젝트 풀링이란?

미리 생성한 오브젝트를 필요한 순간에 가져다가 사용하는 개념이다. 

프로그램 중간에 할당하지 않아 성능상 이점이 있다.

 

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);

댓글