호빵의 IT 개발소

[게임 서버] thread(쓰레드) 본문

C#, 유니티/게임 서버

[게임 서버] thread(쓰레드)

호빵Stack 2022. 2. 9. 22:49

- 일반적으로 1개 프로세스(CPU 코어)는 1개 쓰레드를 가지고 작업을 수행합니다. (가장 이상적인 상황)

- 멀티 쓰레드는 1개 프로세스에 2개 이상의 쓰레드를 가지고 작업을 수행합니다.

 

쓰레드를 사용하는 3가지 방법

 

1. Thread 예시

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ServerCore
{
    class Program
    {
        static void MainThread(object state) //쓰레드가 할일
        {
            for(int i = 0; i < 5; i++)
                Console.WriteLine("Hello Thread!");
        }

        static void Main(string[] args)
        {
            Thread t = new Thread(MainThread); //쓰레드 생성
            t.Name = "Test Thread"; //쓰레드 이름 정의
            t.IsBackground = true; //백그라운드에서 실행(메인이 종료되면 쓰레드도 종료)
            t.Start(); //쓰레드 할 일 불러오기
            Console.WriteLine("Waiting for Thread...");
            t.Join(); //쓰레드가 할 일이 끝나면 다음 실행
            Console.WriteLine("Hello World!");
        }
    }
}

 

2. ThreadPool 예시

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ServerCore
{
    class Program
    {
        static void MainThread(object state) //쓰레드가 할일
        {
            for(int i = 0; i < 5; i++)
                Console.WriteLine("Hello Thread!");
        }

        static void Main(string[] args)
        {
            ThreadPool.SetMinThreads(1, 1); //쓰레드 최소 1개
            ThreadPool.SetMaxThreads(5, 5); //쓰레드 최대 5개

            for (int i = 0; i < 4; i++)
                ThreadPool.QueueUserWorkItem((obj) => { while (true) { } }); //오브젝트를 받아서 무한루프를 돈다.

            ThreadPool.QueueUserWorkItem(MainThread);
            
            while (true) //바로 사라지지 않고 무한대로 돌도록 반복문 생성
            {

            }
        }
    }
}

 

3. Task 예시

using System;
using System.Threading;
using System.Threading.Tasks;

namespace ServerCore
{
    class Program
    {
        static void MainThread(object state) //쓰레드가 할일
        {
            for(int i = 0; i < 5; i++)
                Console.WriteLine("Hello Thread!");
        }

        static void Main(string[] args)
        {
            ThreadPool.SetMinThreads(1, 1); //쓰레드 최소 1개
            ThreadPool.SetMaxThreads(5, 5); //쓰레드 최대 5개

            for (int i = 0; i < 5; i++)
            {
                Task t = new Task(() => { while (true) { } }, TaskCreationOptions.LongRunning); //쓰레드가 할 일이 많아 오래걸린다면 새로운 쓰레드를 생성하게 된다.
                t.Start();
            }
            
            while (true) //바로 사라지지 않고 무한대로 돌도록 반복문 생성
            {

            }
         }
    }
}

 

 

 

---------------------------------------------------------------------------------------------------------------------------

참고 : [인프런] Rookiss님의 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

'C#, 유니티 > 게임 서버' 카테고리의 다른 글

[게임 서버] 캐시 이론  (0) 2022.02.11
[게임 서버] 컴파일러 최적화 오류 관련  (0) 2022.02.11
[게임 서버] 서버란?  (0) 2022.02.09
Comments