【发布时间】:2021-07-19 11:05:23
【问题描述】:
class Program
{
static void DoIt(string name)
{
Console.WriteLine($"{DateTime.Now}, Thread{name} started");
Thread.Sleep(50000);
Console.WriteLine($"{DateTime.Now}, Thread{name} done");
}
static void Main()
{
//ThreadPool.SetMinThreads(100, 100);
for (int i = 0; i < 100; i++)
{
int value = i;
ThreadPool.QueueUserWorkItem((s) =>
{
string name = value.ToString();
DoIt(name);
});
}
Console.ReadKey();
}
}
程序的结果: result
2021/4/26 11:26:23,线程 2 开始
2021/4/26 11:26:23, Thread0 开始
2021/4/26 11:26:23,线程1开始
2021/4/26 11:26:23,Thread3 开始
2021/4/26 11:26:24,Thread4 启动
2021/4/26 11:26:25,Thread5 启动
2021/4/26 11:26:26,Thread6 启动
2021/4/26 11:26:27,Thread7 启动
2021/4/26 11:26:28,Thread8 启动
2021/4/26 11:26:29,Thread9 开始
同时启动 100 个线程。前 4 个线程非常快。后面的线程每秒启动一个,直到一些工作线程完成。
- 为什么前 4 个线程很快? 我电脑的cpu核心数是4。如果程序运行在8核或32核的电脑上,前8或32个线程快,其他慢。
- 如果 SetMinThreads 为 100,则所有 100 个线程都快速启动
如果我不 SetMinThreads,为什么后面的线程启动这么慢?
【问题讨论】:
-
GetMaxThreads 返回什么值?
标签: c# .net multithreading task threadpool