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

相关内容

热门资讯

原创 立... 天气一热,不少人都提不起食欲,饭菜摆在面前也没胃口。家里长辈和小朋友更是明显,整日恹恹的,正餐也吃得...
原创 李... “来李庄不吃三绝,等于白来!”老茶馆里飘出的这句话,道出了古镇美食的灵魂。白肉薄如蝉翼,白糕软糯化渣...
原创 建... 每天早上纠结吃啥,想必是不少人的小烦恼,既想做得省事,又盼着吃得营养。一日三餐里,早餐真的不能敷衍,...
原创 初... 一、清热祛湿汤品 1. 冬瓜薏米排骨汤 食材:排骨300g、冬瓜400g、薏米50g、姜片、盐 做...