실험용 쓰레드 만들기
우선 실험용으로 5개의 문장을 출력하는 함수를 하나 만들어보자.
static void MainThread(object state)
{
for (int i = 0; i < 5; i++)
{
Console.WriteLine("Hello Thread!");
}
}
쓰레드를 사용해보자
해당 쓰레드를 사용하려면
Thread t = new Thread(MainThread);
t.Name = "Test Thread";
t.IsBackground = false;
t.Start();
이렇게 불러올 수 있다.
쓰레드 객체 t를 생성하고
이름을 Test Thread로 지정한 다음
Background는 false로 설정한 후
쓰레드를 시작시켰다.
1. Thread.Name
쓰레드에도 이름을 지정해줄 수 있다. 이름을 설정해주지 않았다면 null로 설정된다.
쓰레드 네임은 단 한번만! 설정할 수 있고 다시 설정하려고 하면 InvalidOperationException이 발생한다.
설정한 이름은 vs 상단에서 확인할 수 있다.
2. Thread.IsBackground
쓰레드는 Background Thread와 Foreground Thread 두 종류가 있다.
가장 큰 차이는 Background Thread의 완료 여부와 상관 없이 프로그램이 종료될 수 있다는 것이다.
기본적으로 false로 설정되어 있다.
3. Thread Pooling
원래는 쓰레드를 실행하기 위해 하나하나 쓰레드 객체를 생성하고 실행해야 하지만, C#에도 쓰레드 풀링이 있다.
ThreadPool.QueueUserWorkItem(MainThread);
이렇게 쓰레드풀링을 할 수 있고
ThreadPool.SetMinThreads(1, 1);
ThreadPool.SetMaxThreads(5, 5);
SetMinThreads와 SetMaxThreads를 통해 최대 풀링 양을 사용자가 정의할 수 있다.
4. Thread.Join
Join은 기본적으로 쓰레드가 실행 완료될 때 까지 쓰레드 호출을 차단하는 함수다.
C# 문서 예제를 참고해보자.
메인 함수에선 각각 Thread1과 Thread2를 순차적으로 실행했다. Thread1은 if문에서 Thread2.Join()에 걸리기 때문에 Thread2가 실행 완료될 때까지 Thread1의 호출은 차단되었다가 실행되는 것을 확인할 수 있다.
Task
task를 이용해 비동기적으로 action, function 등 단일 작업을 실행할 수 있고, 결과 값을 받을 수 있다.
아주 오래 걸리는 작업이라면 기존 쓰레드 풀 쓰레드 말고 별도로 관리할 수 있게 TaskCreationOptions.Longrunning으로 설정해야 한다.
Task t = new Task(() => { while (true) { } }, TaskCreationOptions.LongRunning);
t.Start();
'공부 > 게임서버' 카테고리의 다른 글
게임 서버 이론 구현 #4 - SpinLock (0) | 2023.07.30 |
---|---|
게임 서버 이론 구현 #3 - Lock (0) | 2023.07.29 |
게임 서버 이론 구현 #2 - Interlocked (0) | 2023.07.27 |
게임 서버 이론 구현 #1 - 컴파일러 최적화, 캐시 이론, 메모리 배리어 (0) | 2023.07.25 |
게임 서버 이론 (0) | 2023.07.23 |