N代表的是CPU核数
- CPU密集型:corePoolSize = CPU核数 + 1
- IO密集型:corePoolSize = CPU核数 * 2
在《Java并发编程实践》中,是这样来计算线程池的线程数目的:
这种计算方式,我们需要知道上面定义的几个数值,才能计算出来线程池需要设置的线程数。其中,CPU数量是确定的,CPU使用率是目标值也是确定的,W/C也是可以通过基准程序测试得出的。
对于计算密集型应用,假定等待时间趋近于0,是的CPU利用率达到100%,那么线程数就是CPU核心数,那这个+1意义何在呢?
《Java并发编程实践》这么说:
计算密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。
所以 N+1 是一个经验值。
那么对于对于IO密集型应用,假定所有的操作时间几乎都是IO操作耗时,那么W/C的值就为1,那么对应的线程数确实为2N。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容