인프런 - Rookies님의 강의
https://www.inflearn.com/course/%EC%9C%A0%EB%8B%88%ED%8B%B0-mmorpg-%EA%B0%9C%EB%B0%9C-part4
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 - 인프런 | 강의
네트워크/멀티쓰레드/운영체제 등 핵심 전공 지식을 공부하고 게임 서버를 바닥부터 만들어보면서 MMORPG 기술을 학습하는 강의입니다., MMORPG 개발에 필요한 모든 기술, C# + Unity로 Step By Step! 🕹
www.inflearn.com
ThreadPool?
- C#에서만 사용 가능
- 인력사무소의 역할
- 오래걸리는 일이 아닌 단기적인 처리를 할 때 유용
- 오래걸리는 일을 쓰레드 풀에 다 할당해버리면 풀에서 끌어올 쓰레드가 없기에 TO가 날 때 까지 작동이 안됨
사용법
ThreadPool.QueueUserWorkItem("처리할 함수");
QueueUserWorkItem
- 실행을 위해 메서드를 큐에 대기시킴
최소 쓰레드와 최대 쓰레드 제한
public static bool SetMinThreads(int workerThreads, int completionPortThreads)
public static bool SetMaxThreads(int workerThreads, int completionPortThreads
사용
ThreadPool.SetMinThreads(1, 1);
ThreadPool.SetMaxThreads(5, 5);
- 최대로 설정한 n개를 모두 사용중이면 다음 요청이 들어오더라도 대기 상태로 유지
workerThreads
- 일을 처리할 쓰레드
completionPortThreads
- 스레드 풀에 있는 최대 비동기 I/O 스레드 수
- 네트워크 이벤트를 기다린다거나 하는 작업을 하는 쓰레드 갯수 설정
쓰레드 풀의 단점 : 오래걸리는 일을 할당하면, 전체 시스템이 먹통이 될 수 있음
쓰레드 풀의 단점을 극복할 방법?
Task
- 쓰레드 풀을 효율적으로 관리할 수 있다
사용법
Task t = new Task("사용할 함수/매개변수가 Action타입이므로 람다식 사용 시 인자사용 X", TaskCreationOptions.LongRunning);
t.Start();
* 두번째 인자 TaskCreationOptions.LongRunning
- 쓰레드 풀에 들어가긴 하나, 오래 걸리게 되는 별도의 작업이 될 것이다 라는것을 설정
- WorkerThreadPool에서 뽑아서 실행하는것이 아닌, 별도로 처리가 됨
정리
1. C#에서는 쓰레드를 직접 관리할 일이 거의 없다
2. ThreadPool을 적극 활용하자
3. 오래걸리는 작업이라면, Thread를 만들 필요 없이 Task로 만들어서 실행해도 충분함
'C# > C# 서버' 카테고리의 다른 글
[C#/서버] AutoResetEvent / ManualResetEvent (0) | 2023.08.20 |
---|---|
[C#/서버] SpinLock (0) | 2023.08.18 |
[C#/서버] 메모리 배리어 (0) | 2023.08.16 |
[C#/서버] 캐시 이론 (0) | 2023.08.16 |
[C#/서버] 쓰레드 (Thread) (0) | 2023.08.16 |