如何选择线程数量
admin
2024-01-20 16:50:26

👨‍💻个人主页: 才疏学浅的木子
🙇‍♂️ 本人也在学习阶段如若发现问题,请告知非常感谢 🙇‍♂️
📒 本文来自专栏: 面试
🌈 每日一语:人的一生,好不好只有自己知道,乐不乐只有自己明白。 🌈
❤️ 支持我:👍点赞 🌹收藏 🤟关注

本文目录

  • CPU密集型
  • IO密集型
  • 选择线程数量
  • 区别
  • 总结

CPU密集型

CPU密集型 又叫做计算密集型,系统运作大部分是CPU Loading,CPU密集就是该任务需要大量的运算,而没有阻塞,CPU一直全速运行

IO密集型

IO密集型指的是在系统运行过程中,大部分的状况是CPU在等I/O的读/写操作,此时CPU Loading并不高。因为认为本身需要大量I/O操作

选择线程数量

公式:最佳线程数目=(线程等待时间与线程CPU时间之比+1)CPU数目
对于 CPU密集型 ,线程等待时间/线程CPU时间 接近于0,所以设置线程数为CPU的数目
线程数目不易太大,如果线程数太大就会造成线程切换,降低效率
在实际情况中一般CPU密集型线程数量设置为
CPU数+1*
在《Java并发编程实践》中 计算密集型的线程恰好在某时因为发生一个页错误或者因其他原因而暂停,刚好有一个“额外”的线程,可以确保在这种情况下CPU周期不会中断工作。
所以设置为CPU数+1是一个经验值

对于I/O密集型 ,线程CPU 使用率较低,程序中会存在大量的 I/O 操作占用时间,导致线程空余时间很多。线程等待时间/线程CPU时间 大等于1,设置线程数为CPU数*2,后续根据实际情况进行动态的调整

区别

IO密集型:大量网络,文件操作
CPU 密集型:大量计算,cpu 占用越接近 100%, 耗费多个核或多台机器

总结

即使有上面的简单估算方法,也许看似合理,但实际上也未必合理,都需要结合系统真实情况(比如是IO密集型或者是CPU密集型或者是纯内存操作)和硬件环境(CPU、内存、硬盘读写速度、网络状况等)来不断尝试达到一个符合实际的合理估算值。

相关内容

热门资讯

山水皆有情!丽江两山一江的千年... 去过丽江、走过虎跳峡的人,大概率都听过哈巴雪山和金沙江的传说。很多人站在峡谷之下,望着奔腾不息的金沙...
活力中国调研行丨“殷”你而来 ... 9月12日,游客在殷墟博物馆“甲骨文展厅”内参观。位于河南省安阳市的殷墟博物馆新馆是首个全景式展现商...
浦江之夜赴美好相逢,第37届上... 9月12日晚,黄浦江畔灯火璀璨,第37届上海旅游节大巡游在外滩中山东一路上演。不少观众早早便来到外滩...
美丽中国丨秋韵紫鹊界 梯田入画... 这是9月11日拍摄的紫鹊界梯田(无人机照片)。 金秋九月,湖南省娄底市新化县紫鹊界梯田稻谷渐次成熟。...
中国之巅奏响《共同的节日》,千... 千吨阻尼器,“迎世赛、游上海旅游节”。9月13日,由上海市文化和旅游局指导推出上海旅游·会客│巅峰之...