一般说来,大家认为线程池的大小经验值应该这样设置:(其中N为CPU的个数)

  • 如果是CPU密集型应用,则线程池大小设置为N+1
  • 如果是IO密集型应用,则线程池大小设置为2N+1(因为io读数据或者缓存的时候,线程等待,此时如果多开线程,能有效提高cpu利用率)

如果一台服务器上只部署这一个应用并且只有这一个线程池,那么这种估算或许合理,具体还需自行测试验证。

但是,IO优化中,这样的估算公式可能更适合:

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

因为很显然,线程等待时间所占比例越高,需要越多线程。线程CPU时间所占比例越高,需要越少线程。

下面举个例子:

比如平均每个线程CPU运行时间为0.5s,而线程等待时间(非CPU运行时间,比如IO)为1.5s,CPU核心数为8,那么根据上面这个公式估算得到:((0.5+1.5)/0.5)*8=32。这个公式进一步转化为:

最佳线程数目 = (线程等待时间与线程CPU时间之比 + 1)* CPU数目

刚刚说到的线程池大小的经验值,其实是这种公式的一种估算值。

作者:zhangya

链接:https://www.zhihu.com/question/38128980/answer/75041041

来源:知乎

著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明

转载:https://blog.csdn.net/qrne06/article/details/80587576

多线程线程数经验公式相关推荐

  1. 多线程线程数设置多少合适

    前沿 大家都用过线程池,但是线程池数量设置为多少比较合理呢? 线程数的设置的最主要的目的是为了充分并合理地使用 CPU 和内存等资源,从而最大限度地提高程序的性能,因此让我们一起去探索吧! 首先要考虑 ...

  2. CPU核心数与线程数详解

    CPU: CPU就是中央处理单元,物理CPU数就是CPU的硬件个数(socket). 核心: 一开始,每个物理 cpu 上只有一个核心(a single core),对操作系统而言,也就是同一时刻只能 ...

  3. Java多线程读取本地照片为二进制流,并根据系统核数动态确定线程数

    Java多线程读取图片内容并返回 1. ExecutorService线程池 2. 效率截图 3. 源码 1. ExecutorService线程池 ExecutorService线程池,并可根据系统 ...

  4. Shell多线程操作及线程数控制实例

    来源:http://www.jb51.net/article/51720.htm 这篇文章主要介绍了Shell多线程操作及线程数控制实例,文中从单线程实现一个需求开始,不断加入代码实现多线程以及线程数 ...

  5. postgres 支持的线程数_为什么 Java 坚持多线程不选择协程?

    先说结论:协程是非常值得学习的概念,它是多任务编程的未来.但是Java全力推进这个事情的动力并不大. 先返回到问题的本源.当我们希望引入协程,我们想解决什么问题.我想不外乎下面几点: 节省资源,轻量, ...

  6. 多线程 空值线程数_【开发者成长】深入理解多线程编程

    云栖号资讯:[点击查看更多行业资讯] 在这里您可以找到不同行业的第一手的上云资讯,还在等什么,快来! 为什么要使用多线程? 防止并发编程出错最好的办法就是不写并发程序 既然多线程编程容易出错,为什么它 ...

  7. pg多线程更新会发生死锁_何时用多线程?多线程需要加锁吗?线程数多少最合理?...

    一.什么时候应该使用多线程? 今天看到一个问题,突然有感而发,想聊下这个话题. 不知道大家有没有想过这个问题,就是什么时候我该使用多线程呢?使用多线程就一定会提升系统性能吗? 1.其实是否应该使用多线 ...

  8. Java多线程之线程池配置合理线程数

    Java多线程之线程池配置合理线程数 目录 代码查看公司服务器或阿里云是几核的 合理线程数配置之CPU密集型 合理线程数配置之IO密集型 1. 代码查看公司服务器或阿里云是几核的 要合理配置线程数首先 ...

  9. Python继承类的方式实现多线程及控制线程数

    继承threading.Thread,并重写run方法实现多线程,这里用到logging日志模块是为了输出好看一些,直接print的话会几行叠在一起,不好看: 1 2 3 4 5 6 7 8 9 10 ...

最新文章

  1. 【Linux学习笔记】 -- 基本Shell命令
  2. 【RocketMQ工作原理】消息的消费
  3. php网站xml链接,xml图像超链接的制作代码
  4. 定时执行 Job - 每天5分钟玩转 Docker 容器技术(135)
  5. 漫画:什么是人工智能
  6. 纯js实现瀑布流布局及ajax动态新增数据
  7. 从云服务器上拷贝文件,从云服务器上拷贝文件
  8. 安徽医科大学计算机考研,这所985院校将现场面试!安徽医科大学缺额超800人!调剂信息更新...
  9. SQL语言基础【DDL、DML、DCL、DQL】
  10. CentOS 7 安装VirtualBox
  11. 排列组合公式/排列组合计算公式
  12. python+opencv实现人脸识别|采用现成训练好的模型
  13. 成都榆熙电子商务有限公司:拼多多商家如何剖析用户数据?
  14. ui标注android ios,IOS+ANDROID的UI切图与标注方法
  15. 用js实现鼠标的小尾巴
  16. docker服务器搬迁后遇到的问题:宿主ip不通
  17. C4D骨骼绑定和骨骼动画
  18. 中国合伙人及致青春电影名言
  19. java全栈系列之JavaSE-稀释数组029
  20. 物联网与大数据技术-1

热门文章

  1. 面试过程中常遇到的Mysql优化方面的面试题
  2. Mysql注入bypass攻略
  3. The current identity (NT AUTHORITY\NETWORK SERVICE) does not have write access
  4. laravel map方法踩坑记录
  5. 【Mysql】 Mac Mysql密码重置
  6. 大模型 NLP 算法 大汇总
  7. 连接查询(多表查询)——MySQL
  8. 【效率】如何让你的Mac更高效的工作
  9. druid监控sql
  10. Mac系统更新:安装时间过长(卡住了)