原文:http://blog.csdn.net/kirayuan/article/details/6321967性能
咱们能够在cat 里面发现processor数量,这里的processor能够理解为逻辑上的cpu。操作系统
这里摘抄的一段blog来讲明:.net
什么是线程池大小的阻抗匹配原则?
我在《经常使用模型》中提到“阻抗匹配原则”,这里大体讲一讲。线程
若是池中线程在执行任务时,密集计算所占的时间比重为 P (0 < P <= 1),而系统一共有 C 个 CPU,为了让这 C 个 CPU 跑满而又不过载,线程池大小的经验公式 T = C/P。(T 是个 hint,考虑到 P 值的估计不是很准确,T 的最佳值能够上下浮动 50%。)blog
之后我再讲这个经验公式是怎么来的,先验证边界条件的正确性。资源
假设 C = 8, P = 1.0,线程池的任务彻底是密集计算,那么 T = 8。只要 8 个活动线程就能让 8 个 CPU 饱和,再多也没用,由于 CPU 资源已经耗光了。it
假设 C = 8, P = 0.5,线程池的任务有一半是计算,有一半等在 IO 上,那么 T = 16。考虑操做系统能灵活合理地调度 sleeping/writing/running 线程,那么大概 16 个“50% 繁忙的线程”能让 8 个 CPU 忙个不停。启动更多的线程并不能提升吞吐量,反而由于增长上下文切换的开销而下降性能。线程池
若是 P < 0.2,这个公式就不适用了,T 能够取一个固定值,好比 5*C。sso
另外,公式里的 C 不必定是 CPU 总数,能够是“分配给这项任务的 CPU 数目”,好比在 8 核机器上分出 4 个核来作一项任务,那么 C=4。经验