C#
Thread Pool
윤태영(Coding)
2023. 6. 16. 04:09
< Thread Pool >
수영장을 떠올려보자. 수영장에는 여러 개의 수영 차선이 있다. 이제 각 차선을 스레드라고 생각하고, 수영하는 사람들을 작업이라고 생각해보자. 수영장 관리자는 사람들이 수영할 때마다 새로운 차선을 만들지 않는다. 대신 이미 있는 차선을 활용한다. 이렇게 미리 만들어진 차선을 사용하는 것이 효율적이다. 이 개념이 바로 Thread Pool이다.
< 👨🍳 레스토랑에서의 Thread Pool >
레스토랑을 예로 들어보자. 레스토랑에는 요리사들이 있고, 주문이 들어올 때마다 요리를 만들어야 한다. 요리사들은 스레드처럼 생각할 수 있고, 주문은 작업으로 생각할 수 있다.
레스토랑이 바빠지면 요리사들은 계속해서 요리를 만들어야 하는데. 이때 레스토랑 주인이 매번 새로운 요리사를 고용하는 것은 비효율적이다. 대신 미리 여러 요리사를 고용해두고, 주문이 들어올 때마다 그들에게 요리를 맡기는 것이 효율적이다. 이 미리 고용된 요리사들의 그룹이 Thread Pool과 비슷한 개념이다.
using System;
using System.Threading;
class Program
{
static void Main()
{
Console.WriteLine("레스토랑이 문을 열었습니다. 주문을 기다리는 중...");
// 5개의 주문이 들어왔다고 가정
for (int i = 1; i <= 5; i++)
{
int orderNumber = i;
ThreadPool.QueueUserWorkItem(o => ProcessOrder(orderNumber));
}
// 요리사들이 요리를 완료할 때까지 기다린다.
Console.WriteLine("주문 처리중...");
Thread.Sleep(5000);
Console.WriteLine("모든 주문이 처리되었습니다!");
}
static void ProcessOrder(int orderNumber)
{
Console.WriteLine($"주문 번호 {orderNumber}를 처리하는 중...");
Thread.Sleep(1000); // 요리하는 시간으로 가정
Console.WriteLine($"주문 번호 {orderNumber} 처리 완료!");
}
}
위의 코드에서는 레스토랑을 열고 5개의 주문을 처리한다. Thread Pool을 사용하여 여러 요리사들이 동시에 주문을 처리한다.
Reference : 이것이 C#이다
https://product.kyobobook.co.kr/detail/S000201856223