Thread
Thread는 운영체제가 할당하는 가장 기본적인 실행 단위로 한 프로세스 내부에서 여러 흐름의 실행 경로를 가지는 것을 가능하게 한다.
Thread t = new Thread(MainThread); t.IsBackground = true; t.Start();
쓰레드는 기본적으로 위와 같이 new 로 생성할 수 있다.
ThreadPool
일반적으로 쓰레드를 생성하고 종료하는 과정은 상당한 비용(쓰레드 생성/컨텍스트 전환 오버헤드)이 들기 때문에, 이러한 비용을 줄인 방법으로 공용 쓰레드 풀을 활용하는 방식을 취한다.
ThreadPool 의 특징은 아래와 같다.
- 자동 관리
- 개발자가 쓰레드를 관리할 필요없이 .NET 런타임이 쓰레드 풀 내 쓰레드 수를 동적으로 조정한다.
- 시스템 부하, 사용 가능한 CPU 리소스, 작업 처리량 등을 고려하여 쓰레드 풀에 할당된 쓰레드 수가 늘어나거나 줄어들 수 있다.
- 작업 큐 기반
- 쓰레드 풀은 쓰레드를 바로 할당하지 않고, 먼저 작업을 큐에 담아두고 대기 중인 쓰레드가 이 큐로부터 작업을 가져가 실행하는 구조이다.
- 이를 통해 빠른 작업 분배가 가능하며, 쓰레드 생성 지연을 최소화할 수 있다.
- 단기 실행 작업에 유리
Task
비동기 프로그래밍과 병렬 처리를 추상화하는 대표적인 고수준 API이다. Thread나 ThreadPool을 직접 관리하지 않고도, 비동기적으로 동작하는 로직을 표현하고 실행할 수 있다.
Task 의 특징은 아래와 같다.
- 고수준 추상화
- Task는 쓰레드 관리 내부 사항을 숨기고, 비동기 연산을 하나의 작업 단위로 다룬다.
- 쓰레드 풀을 직접 제어할 필요가 없다.
- 상태 관리 및 연속적인 작업
- Task 는 완료 상태, 예외 발생 여부, 취소 상태 등을 쉽게 확인할 수 있는 속성 및 메서드를 제공한다.
- ContinueWith 메서드를 사용하면 어떤 Task 가 완료된 후 추가 동작을 이어붙일 수 있어, 작업들의 파이프라인을 형성하고 복잡한 흐름을 다루기에 용이하다.
- 병렬 처리와 스케줄링
- 내부적으로는 ThreadPool을 사용하여 효율적으로 작업을 스케줄링한다.
- 여러 Task를 병렬로 실행하기 쉽고, 작업 스케줄러를 커스터마이징하여 특정한 방식으로 작업을 배치할 수 있다.
- async / await 키워드와의 통합
- await 키워드를 통해 동기 코드와 유사한 흐름으로 비동기 로직을 구현할 수 있다.
- 예외 처리 및 취소 기능
- Task 는 예외 처리 시 Task.Exception 을 통해 예외 정보를 제공한다.
- CancellationToken을 이용하면 Task 실행 도중 취소 요청을 하고 작업을 안전하게 중단할 수 있다.
'네트워크 > 게임 서버' 카테고리의 다른 글
게임 서버 - 멀티쓰레드 개론 (0) | 2024.12.09 |
---|