首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >线程池会在“纯异步”程序中创建多于{num的核}线程吗?

线程池会在“纯异步”程序中创建多于{num的核}线程吗?
EN

Stack Overflow用户
提问于 2015-09-06 08:13:10
回答 1查看 73关注 0票数 0

考虑一个理论上的“纯异步”.NET程序( web服务器)--没有线程被阻塞,所有I/O都是完全异步的。现在,假设服务器上负载很重,请求(任务)排队的速度比排队快(因为I/O延迟)。显然,在这种情况下,比num_of_cores线程更不能提高吞吐量--服务器只是处于极限。但是,ThreadPool会认识到这个事实吗?还是会尝试创建越来越多的线程来减少对任务缓冲区的压力?

*num_of_cores指的是操作系统所看到的逻辑核的数量。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-09-06 09:33:40

但是,ThreadPool会认识到这个事实吗?还是会尝试创建越来越多的线程来减少对任务缓冲区的压力?

CLR线程池不知道底层操作系统可以处理的IO请求数据包(IRQ)的实际数量。它有一个人为的限制,在线程池的VM实现中设置:

代码语言:javascript
运行
复制
SVAL_IMPL_INIT(LONG,ThreadpoolMgr,MaxLimitTotalCPThreads,1000); 

您可以通过调用ThreadPool.SetMaxThreads来自己更改该值。当您这样做时,VM会这样做:

代码语言:javascript
运行
复制
MaxLimitTotalCPThreads = 
        min(MaxIOCompletionThreads, (DWORD)ThreadCounter::MaxPossibleCount);

其中ThreadCounter::MaxPossibleCount等于0x7FFF (524287)完成端口线程。

线程池尝试将这些操作从您身上抽象出来,这是您不应该真正担心的。让线程池为您平衡工作,根据需要分配和销毁线程。最坏的情况是,您将开始注意到IO操作的延迟,但我非常肯定,您需要付出一定的努力才能真正达到这个极限。

通常,如果您对本机实现感兴趣,可以使用在GitHub上浏览它

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32421443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档