오브젝트 풀링이란?
미리 생성한 오브젝트를 필요한 순간에 가져다가 사용하는 개념이다.
프로그램 중간에 할당하지 않아 성능상 이점이 있다.
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);
'프로그래밍 > Game Dev' 카테고리의 다른 글
[C#] MessagePack (0) | 2023.08.26 |
---|---|
[C#] 메모리 베리어 (0) | 2023.08.26 |
[C#] 캐시 메모리 철학 (0) | 2023.08.26 |
채용 정보를 통해 알아보는 게임 서버 기술 스택 정리 (0) | 2023.08.19 |
웹 서버 방식의 게임 서버 정리 (0) | 2023.08.19 |
댓글