计算密集型与IO密集型

计算密集型
    计算密集型,顾名思义就是应用须要很是多的CPU计算资源,在多核CPU时代,咱们要让每个CPU核心都参与计算,将CPU的性能充分利用起来,这样才算是没有浪费服务器配置,若是在很是好的服务器配置上还运行着单线程程序那将是多么重大的浪费。对于计算密集型的应用,彻底是靠CPU的核数来工做,因此为了让它的优点彻底发挥出来,避免过多的线程上下文切换,比较理想方案是:
    线程数 = CPU核数+1
    也能够设置成CPU核数*2,这仍是要看JDK的使用版本,以及CPU配置(服务器的CPU有超线程)。对于JDK1.8来讲,里面增长了一个并行计算,计算密集型的较理想线程数 = CPU内核线程数*2数据库

IO密集型
    对于IO密集型的应用,就很好理解了,咱们如今作的开发大部分都是WEB应用,涉及到大量的网络传输,不只如此,与数据库,与缓存间的交互也涉及到IO,一旦发生IO,线程就会处于等待状态,当IO结束,数据准备好后,线程才会继续执行。所以从这里能够发现,对于IO密集型的应用,咱们能够多设置一些线程池中线程的数量,这样就能让在等待IO的这段时间内,线程能够去作其它事,提升并发处理效率。
    那么这个线程池的数据量是否是能够随便设置呢?固然不是的,请必定要记得,线程上下文切换是有代价的。目前总结了一套公式,对于IO密集型应用:
    线程数 = CPU核心数/(1-阻塞系数)
    这个阻塞系数通常为0.8~0.9之间,也能够取0.8或者0.9。套用公式,对于双核CPU来讲,它比较理想的线程数就是20,固然这都不是绝对的,须要根据实际状况以及实际业务来调整。
    final int poolSize = (int)(cpuCore/(1-0.9))缓存

相关文章
相关标签/搜索