이 글은 아래 강의를 정리한 글이다
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 강의 | Rookiss - 인프런
Rookiss | 네트워크/멀티쓰레드/운영체제 등 핵심 전공 지식을 공부하고 게임 서버를 바닥부터 만들어보면서 MMORPG 기술을 학습하는 강의입니다., MMORPG 개발에 필요한 모든 기술, C# + Unity로 Step By St
www.inflearn.com
해당 정리글을 한번에 보고 싶다면 아래 링크를 참조하길 바란다
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버 | Notion
서버OT
mesquite-prune-8c9.notion.site
멀티쓰레드 개론
- cpu와 쓰레드, 프로세스 작동 방식
- cpu 코어가 쓰레드를 실행하는것이 1:1대응으로 실행함
- 여러 프로세스를 진행하기 위해서는 여러 프로세스를 우선순위에 따라 작업을 한다.
- 쓰레드마다 개인 스택은 가지고 있지만 힙은 공용
- 따라서 힙과 같은 공통 영역에 대해서 쓰레드를 할당해주어야 함
쓰레드 만들기
기본 쓰레드 구조
더보기
더보기
// 기본 쓰레드 구조
using System;
using System.Threading;
namespace ServerCore
{
class Program
{
static void MainThread()
{
// while(true)로 무한 반복하게 되면 프로그램이 끝나지 않음
Console.WriteLine("Hello Thread!");
}
static void Main(string[] args)
{
Thread t = new Thread(MainThread);
t.Name = "Thread Name";
// 이 코드는 Thread 이름 정하기
t.IsBackground = true;
// 기본적으로 c#의 쓰레드는 foreground
// background로 실행시키고 싶다면 IsBackground를 true로 바꿔준다.
// main Thread가 종료되면 백그라운드 상태인 Thread도 종료된다.
t.Start();
// t.Join();
// t.Join() 함수는 쓰레드가 종료될때까지 기다리는 함수
Console.WriteLine("Hello World!");
// ThreadPool.QueueUserWorkItem(MainThread);
// 계속 사용하는 Thread가 아닌 잠깐 쓸 Thread는 이걸로 사용
// 기본적으로 이 TheadPool은 background
}
}
}
Thread Pool을 이용하는 방법
더보기
더보기
using System;
using System.Threading;
namespace ServerCore
{
class Program
{
static void MainThread(object state)
{
Console.WriteLine("Hello Thread!");
}
static void Main(string[] args)
{
ThreadPool.SetMinThreads(1, 1);
ThreadPool.SetMaxThreads(5, 5);
for(int i = 0; i < 5; i++)
{
ThreadPool.QueueUserWorkItem((obj) => { while(true); });
}
ThreadPool.QueueUserWorkItem(MainThread);
// 최대 Thread 수가 5인데 5개가 모두 작업중이면 다른 일을 시켜도 작동하지 않음
}
}
}
Task에 대한 내용
'Unity' 카테고리의 다른 글
[인프런 강의 정리] 메모리 배리어 (0) | 2024.09.25 |
---|---|
[인프런 강의 정리] 컴파일러 최적화, 캐시이론 (0) | 2024.09.25 |
[인프런 강의 정리] 서버 OT (0) | 2024.09.25 |
[던전크롤링] 맵 툴 만들기 (2) | 2024.03.14 |
[던전크롤링] 기획안 (1) | 2024.03.14 |