在java中,几乎所有需要异步或者并发执行任务的程序都可以使用线程池。在开发过程中,合理的使用线程池能够带来3个好处:

  • 首先是降低资源消耗。通过重复利用已创建的线程降低创建线程和销毁线程所带来的开销。
  • 提高响应速度。当任务到达时,任务可以不需要等待线程创建就立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅消耗系统资源,同时降低系统的稳定性,使用线程池可以进行统一分配、调优和监控。

如何合理的使用线程池,如何合理的给出线程池的大小,是非常重要的。 
对于线程池的大小不能过大,也不能过小。过大会有大量的线程在相对较少的CPU和内存上竞争,过小又会导致空闲的处理器无法工作,浪费资源,降低吞吐率。

对于线程池大小的设定,我们需要考虑的问题有:

  • CPU个数
  • 内存大小
  • 任务类型,是计算密集型(CPU密集型)还是I/O密集型
  • 是否需要一些稀缺资源,像数据库连接这种等等
  • 等等

有种简单的估算方式,设N为CPU个数

  • 对于CPU密集型的应用,线程池的大小设置为N+1
  • 对于I/O密集型的应用,线程池的大小设置为2N+1

这种设置方式适合于一台机器上的应用的类型是单一的,并且只有一个线程池,实际情况还需要根据实际的应用进行验证。
在I/O优化中,以下的估算公式可能更合理:

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

由公式可得,线程等待时间所占比例越高,需要越多的线程。 
线程CPU时间所占比例越高,所需的线程数越少。

线程池大小如何确定?相关推荐

  1. 如何合理地估算线程池大小?

    点击上方"方志朋",选择"置顶或者星标" 你的关注意义重大! 来源:蒋小强 , ifeve.com/how-to-calculate-threadpool-si ...

  2. 别再纠结线程池大小/线程数量了,没有固定公式的

    可能很多人都看到过一个线程数设置的理论: CPU 密集型的程序 - 核心数 + 1 I/O 密集型的程序 - 核心数 * 2 不会吧,不会吧,真的有人按照这个理论规划线程数? 线程数和CPU利用率的小 ...

  3. python3 ThreadPoolExecutor 线程池大小设置

    线程池的理想大小取决于被提交任务的类型以及所部署系统的特性.线程池应该避免设置的过大或过小,如果线程池过大,大量的线程将在相对很少的CPU和内存资源上发生竞争,这不仅会导致更高的内存使用量,而且还可能 ...

  4. java 线程池 初始大小_为什么tomcat的默认线程池大小如此之大? - java

    我注意到默认的tomcat 7线程池大小似乎是200. 但是普通的CPU似乎有16个内核. 因此只能并行执行16个线程 为什么tomcat使用那么多线程. 参考方案 多年以来,许多单核计算机问世,并且 ...

  5. 别再纠结线程池大小 + 线程数量了,没有固定公式的!

    来源:juejin.cn/post/6948034657321484318 线程数和CPU利用率的小测试 线程数和CPU利用率的小总结 线程数规划的公式 真实程序中的线程数 附录 Java 获取CPU ...

  6. idhttpserver是按线程接受请求的吗_1000个并发线程,10台机器,每台机器4核,设计线程池大小...

    一道面试题 兄弟们,怎么说? 我觉得如果你工作了两年左右的时间,或者是突击准备了面试,这题回答个八成上来,应该是手到擒来的事情.这题中规中矩,考点清晰,可以说的东西不是很多. 但是这都上血书了,那不得 ...

  7. 如何计算tomcat线程池大小?

    如何计算tomcat线程池大小? 背景 在我们的日常开发中都涉及到使用tomcat做为服务器,但是我们该设置多大的线程池呢?以及根据什么原则来设计这个线程池呢? 接下来,我将介绍本人是怎么设计以及计算 ...

  8. 如何用利特尔法则调整线程池大小

    利特尔法则 利特尔法则派生于排队论,用以下数学公式表示: L=λWL = λW L=λW L 系统中存在的平均请求数量. λ 请求有效到达速率.例如:5/s 表示每秒有5个请求到达系统. W 请求在系 ...

  9. 线程池大小设置,CPU的核心数、线程数的关系和区别,同步与堵塞完全是两码事

    线程池应该设置多少线程合适,怎么样估算出来.最近接触到一些相关资料,现作如下总结. 最开始接触线程池的时候,没有想到就仅仅是设置一个线程池的大小居然还有这么多的学问,汗颜啊. 首先,需要考虑到线程池所 ...

最新文章

  1. 20160115广州MVP线下聚会
  2. 架构师速成-架构目标之可用性
  3. iOS点滴- ViewController详解
  4. 【转】用户十秒离开你网站的25个原因
  5. aws linux 安装图形,linux – 用于安装AWS CLI工具的Bash脚本
  6. c++(/clr)非托管类型和托管类型互转
  7. UE4 C++最基础的API
  8. debian9 使用cups远程管理打印服务
  9. Android之ListView
  10. ACM在线模版-f-zyj
  11. 6 个常用的 API 接口在线管理平台
  12. 设计一个长方形类。成员变量包括:长度和宽度,成员函数除包括计算周长和计算面积外, 还包括用set方法来设置长方形的长度和宽度,以及用get的方法来获得长方形的长度和宽度 最后,编写一个测试程序来测试所
  13. 2、java语言基础课程2
  14. python(11)- 文件处理
  15. 重庆新地标佛罗伦萨小镇将开业;雅高宣布2021年开业新酒店计划;阅文集团出售懒人听书股权​ | 美通企业周刊...
  16. 2022-08-17 工作记录--Git-贮藏 和 弹出贮藏
  17. Revenge of the Nerds(书呆子的复仇......)
  18. WIN10的联想小新VMcare安装Centos7虚拟机时提示“Intel VT-x处于禁用状态”有以下几种解决办法
  19. F8观后感:Facebook不止眼前的繁荣,还有雄心和远方
  20. Target EDI 管理

热门文章

  1. 浅谈软件可视化分析内存消耗综述中的识别方法
  2. 解释耳语协议和 Status.im
  3. 华东师范大学 计算机 博士 毕业论文,华东师大:1/4博士生完不成论文难毕业
  4. 高性能两级缓存J2Cache
  5. csapp-buflab
  6. 计算机阴影字 操作步骤,计算机一级Photoshop操作辅导:阴影字
  7. 如何设计一个可扩展的优惠券功能
  8. deepin更新失败_更新失败
  9. ZIP压缩包下载总结
  10. linux 繁体中文转为简体,linux - 安装OpenCC(简体繁体转换)