【你问我答】如何设计核心线程数量?

问题描述:

如何设计核心线程数量?

回答有奖:

选取一位认真回答问题的牛友,赠送200牛币!
▶回答尽量有自己的思考,不要单纯的只是复制粘贴定理定义,或者他人blog哦~

你问我答问题汇总:点击进入
关注你问我答栏目:点击关注

你问我答 - 答问题,成大佬,拿牛币!
你问我答是牛客新栏目,每周1期几个面试中真实遇到的问题,
牛友在问题贴下留下自己的知识,经验与见解,
帮助更多牛友了解更多技术相关知识!
#悬赏##Java工程师##面试题目#
全部评论
巧了,昨天面试官才问了这个问题。 需要分为IO密集型任务和CPU密集型任务讨论。 假设任务是IO密集型的,那么其实CPU利用率不高,每个任务进来,只用了很短的CPU时间就被中断了,大部分时间都在等待IO,所以我们将线程的数量增加,远超过CPU核心的数量,这样的话就能一定程度提高CPU的利用率,并且能做到在同一时间内处理更多的IO密集任务。 如果任务是CPU密集型的,那么其实每个任务对CPU的占用很大,利用率较高,就算我们开了大于CPU核心数量的线程,多余的线程其实也是在等待,没有空余的CPU时间分给它执行,或者会造成很多线程切换,导致浪费了大量的上下文切换时间。所以我们将线程数量设置为CPU核心数,这样就能处于一个比较好的利用率的状态。 纯手打,请尊重劳动成果,不要复制
5 回复
分享
发布于 2020-09-15 16:26
并行算法这种纯粹为了压榨性能的,计算线程等于机器核心数,都忙起来就完事,如果是工程里面基于逻辑划分开线程,就按照结合模块数和cpu核心数来调参。
点赞 回复
分享
发布于 2020-09-15 15:56
联想
校招火热招聘中
官网直投
这是问的线程池的线程数量的设计吗 根据不同的场景设计不同的线程数 1.如果希望多个任务排队执行,线程数固定为 1,任务数大于 1 时,将任务放入无界队列排队。 2.当任务量已知,且每个任务都是相对耗时的,可以设置线程池核心线程数为固定大小(大小自己指定)。 3.当任务数比较密集,但每个任务执行时间较短时,设置核心线程数为0,全部使用救急线程(因为救急线程可以无限创建)。
点赞 回复
分享
发布于 2020-09-20 19:24

相关推荐

点赞 评论 收藏
转发
头像
不愿透露姓名的神秘牛友
03-13 14:57
点赞 评论 收藏
转发
点赞 2 评论
分享
牛客网
牛客企业服务