Console.WriteLine($"The number of processors on this computer is {Environment.ProcessorCount}.");
var maxWorkerThreads = 0;
var maxCompletionPortThreads = 0;
ThreadPool.GetMaxThreads(out maxWorkerThreads, out maxCompletionPortThreads);
Console.WriteLine("Maximum worker threads: {0}", maxWorkerThreads);
var availableWorkerThreads = 0;
var completionPortThreads = 0;
ThreadPool.GetAvailableThreads(out availableWorkerThreads, out completionPortThreads);
Console.WriteLine($"Available Worker threads: {availableWorkerThreads}", availableWorkerThreads);
var usedWorkerThread = maxWorkerThreads - availableWorkerThreads;
Console.WriteLine($"Used worker threads: {usedWorkerThread}");
int minWorker, minIOC;
// Get the current settings.
ThreadPool.GetMinThreads(out minWorker, out minIOC);
Console.WriteLine("Minimum worker threads: {0}", minWorker);
// Thread.Sleep(1000 * 10); // Sleep for 10 seconds
Console.WriteLine("Thread completed. go back to the pool.");
return usedWorkerThread;
요청을 해보자.
1000개의 요청을 계속 보내도 Threadpool queue는 많이 늘어나지 않는다.
왜냐면 요청을 처리후 바로 다음 요청을 처리하기 때문이다.
이제 10초를 대기해보자.
Thread.Sleep(1000 * 10); // Sleep for 10 seconds
이부분의 주석을 제거하고 다시 실행
모든 요청이 큐로 들어가고 Thread가 하나씩 생성이 된다. 10초후에 요청 처리 완료된 Thread는 다시 pool로 들어가자마자 작업을 하므로 queue가 어느정도 늘어난후 상태를 유지한다.
문제 발생
2000개가 큐에 들어가고 초당 1-2개씩이 Thread가 생성이 되고 있다. 이것은 문제가 발생할수 있다.