首页 新闻 会员 周边

ASP.NET Core 默认线程池大小是多少

0
悬赏园豆:50 [已解决问题] 解决于 2019-09-02 22:10

也就是说 ASP.NET Core 程序一启动后线程池中有多少个线程?

dudu的主页 dudu | 高人七级 | 园豆:30994
提问于:2019-09-01 18:36
< >
分享
最佳答案
0

最小线程池个数是CPU的核心数,最大线程池个数是32767dotnet 生成新线程的规则是,当有新任务需要线程时,先在线程池中找空闲线程,如果没有空闲,就等待500ms看是否有线程空闲出来,如果还是没有,产生一个新线程。

收获园豆:50
ohyex | 小虾三级 |园豆:1496 | 2019-09-01 22:10

当程序启动后一下子来了1000个并发请求会怎样?

dudu | 园豆:30994 (高人七级) | 2019-09-01 22:15

@dudu: 刚开始工作线程肯定是不够用,会开始创建大量的新线程,最后具体会创建多少个新线程,应该看各个请求的处理速度了。可以通过 ThreadPool.GetMaxThreads 减去ThreadPool.GetAvailable的值打印出当前的工作线程数。

ohyex | 园豆:1496 (小虾三级) | 2019-09-01 23:28

通过下面的 Startup 中的代码验证了,线程池默认最小线程数的确是 CPU 的核心数

ThreadPool.GetMinThreads(out var workThreads, out var completionPortThreads);
logger.LogInformation(new StringBuilder()
    .Append($"ThreadPool.ThreadCount: {ThreadPool.ThreadCount}, ")
    .Append($"Minimum work threads: {workThreads}, ")
    .Append($"Minimum completion port threads: {completionPortThreads})").ToString());

在4核8G服务器上运行的输出是

ThreadPool.ThreadCount: 4, Minimum work threads: 4, Minimum completion port threads: 4
dudu | 园豆:30994 (高人七级) | 2019-09-02 22:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册