作者简介:大家好,我是码炫码哥,前中兴通讯、美团架构师,现任某互联网公司CTO,兼职码炫课堂主讲源码系列专题
代表作:《jdk源码&多线程&高并发》,《深入tomcat源码解析》,《深入netty源码解析》,《深入dubbo源码解析》,《深入springboot源码解析》,《深入spring源码解析》,《深入redis源码解析》等
联系qq:184480602,加我进群,大家一起学习,一起进步,一起对抗互联网寒冬。码炫课堂的个人空间-码炫码哥个人主页-面试,源码等
回答
先回答公式
一般情况下,需要根据任务类型的不同设置不同的线程数:
- CPU 密集型,则线程池大小设置为
CPU 核数 + 1 - I/O 密集型,则线程池大小设置为
2 * CPU 核数 + 1
一般这种问题仅仅只回答公式还是不够的,我们需要了解场景、机器配置、并发量之类的,然后最重要的是:压测!!!压测!!!压测!!!
扩展知识
CPU 密集型
这种任务消耗的主要是 CPU 资源,例如加密、解密、计算等等 ,可以将线程数设置为 N(CPU 核心数)+1。
如果线程数量设置太小,会导致 CPU 得不到充分的利用,则会让大量请求被阻塞在线程队列中排队等待执行线程。
如果线程数量设置太大,则会让系统中存在大量的线程抢夺 CPU 资源,会导致大量的上下文切换,从而增加系统的开销
I/O 密集型
I/O 密集型任务,包括数据库、文件的读写,网络通信等等,这类任务会用大部分的时间来处理 I/O 交互,而线程在处理

最低0.47元/天 解锁文章
641

被折叠的 条评论
为什么被折叠?



