【线程池】面试被问到线程池参数如何配置时该如何回答

这篇具有很好参考价值的文章主要介绍了【线程池】面试被问到线程池参数如何配置时该如何回答。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

       前言

        没有基于业务场景,直接抛出这个问题,等同于耍流氓。

        八股文告诉我们CPU密集型就核心数+1,IO密集型就核心数*2,那么真实业务中该怎么去配置呢。

        方法论还是有的

        1.需要分析线程池执行的任务的特性: CPU 密集型还是 IO 密集型
        2.每个任务执行的平均时长大概是多少,这个任务的执行时长可能还跟任务处理逻辑是否涉及到网络传输以及底层系统资源依赖有关系
        如果是 CPU 密集型,主要是执行计算任务,响应时间很快,cpu 一直在运行,这种任务 cpu的利用率很高,那么线程数的配置应该根据 CPU 核心数来决定,CPU 核心数=最大同时执行线程数,加入 CPU 核心数为 4,那么服务器最多能同时执行 4 个线程。过多的线程会导致上下文切换反而使得效率降低。那线程池的最大线程数可以配置为 cpu 核心数+1 如果是 IO 密集型,主要是进行 IO 操作,执行 IO 操作的时间较长,这是 cpu 出于空闲状态,导致 cpu 的利用率不高,这种情况下可以增加线程池的大小。这种情况下可以结合线程的等待时长来做判断,等待时间越高,那么线程数也相对越多。一般可以配置 cpu 核心数的 2 倍。
        一个公式:线程池设定最佳线程数目 = ((线程池设定的线程等待时间+线程 CPU 时间)/
线程 CPU 时间 )* CPU 数目
        这个公式的线程 cpu 时间是预估的程序单个线程在 cpu 上运行的时间(通常使用 loadrunner测试大量运行次数求出平均值)




        日常业务线程池的配置,项目中比比皆是,线程池的参数设置大多基于开发任务人员的经验,基于对项目的熟悉,基于对屎山了如执掌。

        假如啊一个新瓜蛋子刚来项目,接到要给业务人员发通知邮件,小同志很有想法,邮件嘛,异步发,搞个线程池,还不影响业务,咔咔一顿开发,参数就按照网上通用的来,IO密集型,核心线程数就CPU核心数*2吧。

        老油条一看你这可不太行,这邮件本身也不重要,你搞这么多线程数很容易影响核心业务,

随手就从屎山的角落掏出一堆线程池告诉你,现在这个屎山可不稳定,回头项目上线一爆炸,很容易大家都一身屎,天天开发shift也不用按了,先把shit清了再说。

        像这种边缘业务场景,核心线程数及最大线程数设置为1个就行了,队列大小嘛,按照现在业务量来说设置个1000个,满满的够了。

        基于业务场景设置线程池参数,开发人员必须对业务和项目足够深度的了解,很深的那种,至少要到业务一加需求,有底气摇头say no。

        但是,但是,但是,在复杂的业务场景下,我们总能找到一些规律,线程池这个不安分的炸弹也会被我们揪到一些蛛丝马迹。

        我举个例子。

例子一

        我们的职位详情页展示数据来源较多,涉及多方的业务,比如职位信息,企业信息,HR信息,还有风险提示等等

【线程池】面试被问到线程池参数如何配置时该如何回答,线程池,面试,线程池,多线程,java

        职位详情页是我们兼职服务的一个核心业务功能点,如果串行处理,在业务高峰期很容易响应过慢。

        这个时候我们需要使用多线程的查询组装页面信息,线程池无疑是一个不二的选择。

        首先这是个IO密集型业务,没有复杂的计算逻辑,对于参数设置,开始我们配置核心线程数50,最大线程数都是100个,阻塞队列1000,拒绝策略执行后降级处理。

        核心线程数及最大线程数尽可能的大,防止详情页挂掉,正常请求耗时很少,线程数足够的话,业务高峰也不会有问题。

例子二

        我们有个内部的业务系统,核心业务是使用Excel模板导入大量数据,然后标准化存储后,推送给第三方使用。

        导入的业务数据需要层层清洗及计算,CPU密集型,这里我们线程池的配置就不能像上个例子那么配置了,选择较少的线程数,然后队列配置的大一些。

结语

        有些我认为标准化的线程池配置,我列举出来,大家来找茬文章来源地址https://www.toymoban.com/news/detail-704547.html

  1. 自定义线程池
  2. 不适用吴姐队列队列
  3. 选用合适的拒绝策略

到了这里,关于【线程池】面试被问到线程池参数如何配置时该如何回答的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 面试被问到了解哪些开发模型?看这一篇就够了

    软件开发模型是指软件开发全部过程、活动和任务的结构框架。一般包括需求、设计、编码和测试等阶段,甚至包括维护阶段。软件开发模型明确规定了软件开发过程中要完成的主要活动和任务,用来指导整个开发过程中的工作。对于不同的系统,可依据软件的特点、项目成

    2024年02月04日
    浏览(53)
  • 软件测试面试一定会被问到的10个技术问题(附答案)

    本文记得熟读并背诵,99%通过技术二 范例回答: 一般都是让你对一个“书本”“水杯”“电梯”这些老例子做测试用例,这些答案百度一下全部都是,掌握好测试用例的方法,换成什么例子都可以讲的全面。 对方还会根据这个问题衍生出:你觉得什么样算是好测试用例,好

    2024年02月13日
    浏览(42)
  • 最经典的20个Spring Boot面试题,95%以上会被问到,不服来战

    非常热门的 20 个Spring Boot 技术面试中经常被问到的问题。 1. Spring Boot 有哪些特点? Spring Boot 是 Spring 的扩展,它消除了设置 Spring 应用程序所需的样板配置。 自动配置 这是 Spring Boot 最重要的特性。这极大地消除了手动配置。基础框架附带了一个名为 auto-configure 的内置库,

    2024年02月08日
    浏览(34)
  • 【Linux驱动开发100问】Linux驱动开发工程师在面试中常被问到的问题汇总

    🥇今日学习目标:什么是Kconfig?如何使用Kconfig? 🤵‍♂️ 创作者:JamesBin ⏰预计时间:10分钟 🎉个人主页:嵌入式悦翔园个人主页 🍁专栏介绍:Linux驱动开发100问 什么是Linux内核? 如何编译Linux内核? 什么是模块?如何编写和使用模块? 什么是Makefile?如何编写Makefi

    2024年02月06日
    浏览(111)
  • 面试时被问:为什么裁员只裁你,不裁别人,该怎么回答?

    面试官总有各种奇奇怪怪的问题,比如这个:为什么裁员裁了你,而不是裁别人? 这个充满恶意的问题该怎么回答? 网友给出了各种各样的答案,有人说,就说行业动荡,不稳定。 有人说,因为领导无能,企业发展不起来,不裁怎么办?至于为什么裁我?因为我不舔。 有人

    2023年04月08日
    浏览(30)
  • 阿里二面:Kafka中如何保证消息的顺序性?这周被问到两次了

    在现代分布式系统中,消息顺序消费扮演着至关重要的角色。特别是在涉及事务处理、日志追踪、状态机更新等场景时,消息的处理顺序直接影响着系统的正确性和一致性。例如,金融交易系统中,账户间的转账操作必须严格按照发出请求的顺序进行处理,否则可能导致资金

    2024年03月20日
    浏览(27)
  • Java面试被问了几个简单的问题,却回答的不是很好

    作者: 逍遥Sean 简介:一个主修Java的Web网站游戏服务器后端开发者 主页:https://blog.csdn.net/Ureliable 觉得博主文章不错的话,可以三连支持一下~ 如有需要我的支持,请私信或评论留言! 前言 前几天参加了一个做web开发的面试,被问了几个问题,虽然有些题目比较偏,但是确

    2024年02月08日
    浏览(54)
  • 大厂HR经常会问到的Java线程池面试题

    一、什么是线程池         线程池和数据库连接池非常类似,可以统一管理和维护线程,减少没有必要的开销。 二、为什么要使用线程池         因为在项目开发过程中频繁的开启线程或者停止线程,线程需要重新被CPU从就绪状态调度到运行状态,需要发生CPU的上下

    2024年02月14日
    浏览(26)
  • 高级Java多线程面试题及回答

        高级Java多线程面试题及回答   1)现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?   这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。   2)在J

    2024年02月06日
    浏览(29)
  • 面试时如何回答接口测试怎么进行

    一、什么是接口测试 接口测试顾名思义就是对测试系统组件间接口的一种测试,接口测试主要用于检测外部系统与系统之间以及内部各个子系统之间的交互点。测试的重点是要检查数据的交换,传递和控制管理过程,以及系统间的相互逻辑依赖关系等。 二、为什么要做接口

    2024年02月12日
    浏览(30)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包