如何选择线程数量
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、内存、硬盘读写速度、网络状况等)来不断尝试达到一个符合实际的合理估算值。

相关内容

热门资讯

文博场馆优化提升 “双奥园区”... 观众在中国考古博物馆参观 朝阳区持续探索奥运场馆赛后可持续运营路径,推动各场馆提质增效。北京青年报记...
怎么挑选适配不同场景的儿童游乐... 随着亲子消费业态的发展以及城市公共服务配套的不断完善,各类游乐设施的市场需求持续增长,不同场景、不同...
发布会深一度|金色吉林,已备好... (来源:中国吉林网) 转自:中国吉林网 图片来源 图虫创意 金风送爽,吉林大地迎来了层林尽染的最美...