php适合cpu密集型还是io,线程数设置和CPU数的关系

线程池大小的设置通常取决于应用类型。对于CPU密集型应用,推荐设置为CPU核心数加一,而IO密集型应用则建议设置为两倍CPU核心数加一。然而,实际估算应考虑线程等待时间和CPU时间的比例,公式为:最佳线程数目=(线程等待时间与线程CPU时间之比+1)*CPU数目。例如,当线程CPU时间为0.5s,等待时间为1.5s,CPU核心数为8时,线程池大小应为32。此估算适用于优化IO操作的应用。
摘要由CSDN通过智能技术生成

我是搬运工,以下答案均来自于并发编程网(如何合理地估算线程池大小?)。我只是部分整理了一下。

一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)

如果是CPU密集型应用,则线程池大小设置为N+1

如果是IO密集型应用,则线程池大小设置为2N+1(因为io读数据或者缓存的时候,线程等待,此时如果多开线程,能有效提高cpu利用率)

如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。

但是,IO优化中,这样的估算公式可能更适合:

最佳线程数目 = ((线程等待时间+线程CPU时间)/线程CPU时间 )* CPU数目

因为很显然,线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。

下面举个例子:

比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。这个公式进一步转化为:

最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目

刚刚说到的线程池大小的经验值,其实是这种公式的一种估算值。

作者:zhangya

链接:https://www.zhihu.com/question/38128980/answer/75041041

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值