io密集服务器cpu性能,IO密集型和CPU密集型 线程数的计算

本文探讨了CPU密集型和IO密集型应用的线程管理。对于CPU密集型任务,理想的线程数等于CPU核心数,以避免上下文切换开销。而对于IO密集型应用,线程数应为CPU核心数除以(1-阻塞系数),以提高并发效率。阻塞系数反映了IO操作所占的时间比例。合理的线程池大小能有效利用服务器资源,避免浪费。
摘要由CSDN通过智能技术生成

CPU密集型

每一个CPU核心都参与计算,将CPU的性能充分利用起来,这样才算是没有浪费服务器配置,如果在非常好的服务器配置上还运行着单线程程序那将是多么重大的浪费。对于计算密集型的应用,完全是靠CPU的核数来工作,所以为了让它的优势完全发挥出来,避免过多的线程上下文切换,比较理想方案是:

线程数= CPU核数

IO密集型

对于IO密集型的应用,就很好理解了,我们现在做的开发大部分都是WEB应用,涉及到大量的网络传输,不仅如此,与数据库,与缓存间的交互也涉及到IO,一旦发生IO,线程就会处于等待状态,当IO结束,数据准备好后,线程才会继续执行。因此从这里可以发现,对于IO密集型的应用,我们可以多设置一些线程池中线程的数量,这样就能让在等待的这段时间内,线程可以去做其它事,提高并发处理效率。

那么这个线程池的数据量是不是可以随便设置呢?当然不是的,请一定要记得,线程上下文切换是有代价的。目前总结了一套公式,对于IO密集型应用:

线程数= CPU核心数/(1-阻塞系数)

阻塞系数: 阻塞系数越高表明在准备数据的时间越长(阻塞时间长)。

即阻塞系数 = 阻塞时间 /(阻塞时间 + 计算时间) 如总时间 10    阻塞9 计算1 及阻塞系数=9/(9+1)=0.9

一般情况下线程数 计算型=Ncpu+1       IO型=2Ncpu

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值