并发下线程池的最佳数量计算

参考文章:https://blog.csdn.net/qq_34417408/article/details/78895573

根据CPU核心数确定线程池并发线程数

1:为什么使用线程池:在高并发的情况下采用线程池,有效的降低了线程创建释放的时间花销及资源开销,如不使用线程池,有可能造成系统创建大量线程而导致消耗完系统内存以及”过度切换”。(在JVM中采用的处理机制为时间片轮转,减少了线程间的相互切换) 。

2:两派公式

第一派:《Java Concurrency in Practice》即《java并发编程实践》:


        Nthreads=Ncpu*Ucpu*(1+w/c),其中

        Ncpu=CPU核心数

        Ucpu=cpu使用率,0~1

        W/C=等待时间与计算时间的比率

第二派:《Programming Concurrency on the JVM Mastering》即《Java 虚拟机并发编程》

线程数=Ncpu/(1-阻塞系数):其中计算密集型阻塞系数为0,IO密集型阻塞系数接近1:



结论就是:

两个公式其实在IO密集型,计算密集型可以统一:

IO密集型=2Ncpu(可以测试后自己控制大小,2Ncpu一般没问题)(常出现于线程中:数据库数据交互、文件上传下载、网络数据传输等等)

计算密集型=Ncpu(常出现于线程中:复杂算法)

java中:Ncpu=Runtime.getRuntime().availableProcessors()

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容