我的代码是
static void Main(string[] args)
{
for (int i = 0; i < 100; i++)
{
ThreadPool.QueueUserWorkItem(y =>
{
Console.WriteLine(Thread.CurrentThread.ManagedThreadId);
Thread.Sleep(3000);
});
}
Console.Read();
}
当我启动程序并查看sos.dll时,我可以看到每次线程池为我提供4-5个线程。因此,因为池不提供更多线程,所以会发生延迟。 为什么会这样?
答案 0 :(得分:3)
每个进程有一个线程池。从.NET Framework 4开始,进程的线程池的默认大小取决于多个因素,例如虚拟地址空间的大小。进程可以调用GetMaxThreads方法来确定线程数。 可以使用SetMaxThreads方法更改线程池中的线程数。每个线程使用默认堆栈大小并以默认优先级运行。
另外请注意,根据系统资源(如CPU内核,RAM等),更多线程可能无法使您的应用程序运行得更快。