首页 新闻 搜索 专区 学院

求解:每个进程都有一个线程池。线程池的默认大小为每个可用处理器有 25 个线程。

1
悬赏园豆:50 [已解决问题] 解决于 2013-10-08 15:18

这是msdn上的一句话,这里的可用处理器是指一个单独的核还是整个芯片?

比如有个四核8硬件线程的CPU。他的一个进程线程池中默认多少个线程呢。25还是25*4

 

不好意思,前段时间出差了。最近拿了一个AMD四核的笔记本和一个酷睿双核的老笔记本测试了下,两台电脑得出的结果都一样居然都是1023和1000

问题补充:

             

大芝麻的主页 大芝麻 | 初学一级 | 园豆:4
提问于:2013-09-16 13:15
< >
分享
最佳答案
0

这里的一个处理器,应该指的是CPU核,但到底是*4还是*8,也就是他是按物理核心数还是虚拟线程数来算的。。。

还真不知道。个人倾向于物理核心数。

貌似《windows核心编程》上有讲过关于标准的线程池线程的做法,是放CPU核数量*2的那么多的线程,不知道asp.net的threadPool设计成这么多意欲何为呢。

嗯,好问题。

收获园豆:5
mumuliang | 菜鸟二级 |园豆:213 | 2013-09-16 17:34
其他回答(2)
1

25 * 8

收获园豆:40
Launcher | 园豆:45045 (高人七级) | 2013-09-16 14:00

不知道是不是我理解错了

支持(0) 反对(0) 大芝麻 | 园豆:4 (初学一级) | 2013-09-24 17:48

@大芝麻: 你能确定 MSDN 上的那段话是指的 ThreadPool 类的行为吗?

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-09-25 09:31

@Launcher: 应该是的呀,因为上面说用这个两个函数查看的。

http://msdn.microsoft.com/zh-cn/library/system.threading.threadpool(VS.80).aspx

支持(0) 反对(0) 大芝麻 | 园豆:4 (初学一级) | 2013-10-07 20:23

@大芝麻: http://www.cnblogs.com/wildman/archive/2008/08/22/1274170.html#commentform

这篇博文后面讲的完成端口测试出可用线程数量也和实际运行的不一样,直接复制的他的代码的

支持(0) 反对(0) 大芝麻 | 园豆:4 (初学一级) | 2013-10-07 20:30

@Launcher: 如果真有那么多可用线程默认等待在那里,岂不是严重影响系统性能

支持(0) 反对(0) 大芝麻 | 园豆:4 (初学一级) | 2013-10-07 20:32

@大芝麻: 你在msdn上切换一下.net的版本,你可以看到解释会有所差异,但是具体来说,线程池的行为是这样的:

1、GetAvailableThreads 是读取的差值,就是 Max - Min 的值;

2、每个可用处理器 250 个辅助线程是 4.0之前的行为,4.0之后改为由"虚拟地址空间的大小等多个因素决定",当然这里的线程数量指代的是 MAX 的值。

3、Available 和 MAX 实际上都指示的队列的大小,实际创建的线程数目不定。MAX 表示队列的上限,Available表示队列的剩余可用数目。

4、线程的创建不是按照请求的任务来,而是综合多方面的因素,按照一定的频率来创建,因此进程通常同时运行的线程数目不会同队列大小相等,你可以通过“资源监视器”来观察实际创建的线程数。

5、辅助线程或工作线程(Worker Thread)是一个简单的数据结构,表示排队的请求,不代表OS的内核线程数目。OS能够同时运行的内核线程数目是每可用处理器 1 个线程,OS为每个进程创建的内核线程数是多少,暂时没有细究,但是必定受到进程堆栈大小的限制。因此你使用 ThreadPool 时,工作线程会先进入队列排队,然后 OS 会分配内核线程来执行,当此内核线程被阻塞时(比如等待其它线程释放资源),那么OS根据一些条件会创建一个新的内核线程来执行请求队列中的下一个请求,或等待一个可用的内核线程被释放。

6、Available 为 0 时表示,队列已满,你的例子里的两个 1023 表示,队列目前还可以继续排入 1023 个请求。

支持(0) 反对(0) Launcher | 园豆:45045 (高人七级) | 2013-10-08 10:26

@Launcher: 原来4.0后改变了。还有这个数字是表示可用请求数,不是当前正在等待的线程数量是吧阿。谢谢了。手机上的,不知道怎么搞的最佳答案是那个了。但分没给错。谢谢大侠得细心指导!

支持(0) 反对(0) 大芝麻 | 园豆:4 (初学一级) | 2013-10-08 15:23
0

“每个可以处理器”是指一个CPU核

收获园豆:5
dudu | 园豆:37797 (高人七级) | 2013-09-16 16:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册