Notice
Recent Posts
Recent Comments
Link
| 일 | 월 | 화 | 수 | 목 | 금 | 토 |
|---|---|---|---|---|---|---|
| 1 | 2 | 3 | 4 | 5 | 6 | |
| 7 | 8 | 9 | 10 | 11 | 12 | 13 |
| 14 | 15 | 16 | 17 | 18 | 19 | 20 |
| 21 | 22 | 23 | 24 | 25 | 26 | 27 |
| 28 | 29 | 30 |
Tags
- 인프런
- list
- rookiss
- 기술면접
- 프래그멘테이션
- c#
- 힙영역
- 리스트
- 자료구조
- 해쉬맵
- std::map
- vector
- 큐
- 객체지향
- map
- static_cast
- Queue
- 반복문
- 벡터
- 스택영역
- thread
- 공부
- 알고리즘
- 스택
- 멀티쓰레드
- 트리
- 차이점
- 배열
- std::unordered_map
- MonoBehaviour
Archives
- Today
- Total
호빵의 IT 개발소
[게임 서버] thread(쓰레드) 본문
- 일반적으로 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