在线客服
扫描二维码
下载博学谷APP
扫描二维码
关注博学谷微信公众号
如今,通过线程池最大程度利用CPU的多核性能是十分常见的基础操作。与此同时线程池的优势是显而易见的,它可以降低系统资源消耗,提高系统响应速度,方便线程并发数的管控等等。那么线程池的实现是怎么样的呢?本文将带大家分析线程池的具体业务场景,现在让我们开始吧~

一、业务场景
快速响应用户请求是线程池十分常见的业务场景。具体来讲就是用户发起的实时请求,服务追求响应时间。比如说用户要查看一个商品的信息,那么我们需要将商品维度的一系列信息如商品的价格、优惠、库存、图片等等聚合起来,展示给用户。
除此之外,快速处理批量任务也是我们会遇到的业务场景。离线的大量计算任务,需要快速执行。比如说,统计某个报表,需要计算出全国各个门店中有哪些商品有某种属性,用于后续营销策略的分析,那么我们需要查询全国所有门店中的所有商品,并且记录具有某属性的商品,然后快速生成报表。
二、使用分析
针对快速响应用户请求的业务场景,我们应该从用户体验角度看,这个结果响应的越快越好,如果一个页面半天都刷不出,用户可能就放弃查看这个商品了。而面向用户的功能聚合通常非常复杂,伴随着调用与调用之间的级联、多级级联等情况,业务开发同学往往会选择使用线程池这种简单的方式,将调用封装成任务并行的执行,缩短总体响应时间。另外,使用线程池也是有考量的,这种场景最重要的就是获取最大的响应速度去满足用户,所以应该不设置队列去缓冲并发任务,调高corePoolSize和maxPoolSize去尽可能创造多的线程快速执行任务。
至于快速处理批量任务,这种场景需要执行大量的任务,我们也会希望任务执行的越快越好。这种情况下,也应该使用多线程策略,并行计算。但与响应速度优先的场景区别在于,这类场景任务量巨大,并不需要瞬时的完成,而是关注如何使用有限的资源,尽可能在单位时间内处理更多的任务,也就是吞吐量优先的问题。所以应该设置队列去缓冲并发任务,调整合适的corePoolSize去设置处理任务的线程数。在这里,设置的线程数过多可能还会引发线程上下文切换频繁的问题,也会降低处理任务的速度,降低吞吐量。
三、结论与反思
线程池使用面临的核心的问题在于线程池的参数并不好配置。一方面线程池的运行机制不是很好理解,配置合理需要强依赖开发人员的个人经验和知识;另一方面,线程池执行的情况和任务类型相关性较大,IO密集型和CPU密集型的任务运行起来的情况差异非常大,这导致业界并没有一些成熟的经验策略帮助开发人员参考。
以上就是线程池的具体业务场景分析,大家都理解了吗?如果大家想要继续深入学习并发编程的相关知识点,可以在博学谷学习课程《Java并发编程高阶技术实践》,课程进入链接:https://www.boxuegu.com/course/detail-1515.html
— 申请免费试学名额 —
在职想转行提升,担心学不会?根据个人情况规划学习路线,闯关式自适应学习模式保证学习效果
讲师一对一辅导,在线答疑解惑,指导就业!
相关推荐 更多
JavaEE开发培训班怎么样?
历经了23年,Java依旧傲居编程语言排行榜,舍我其谁,可以说集万千优势于一身的Java到目前是世界上最受程序员欢迎的编程语言,它广阔的就业前景也吸引着每一个人。不少想学JavaEE开发的小伙伴都有这样的疑问:JavaEE开发培训班怎么样?本文针对这个问题详细为大家解答。
7690
2019-07-22 09:41:10
Java垃圾回收器相关问题解答
相信很许多人在学习Java的时候,都没有搞清楚过Java垃圾回收器。因此本文主要讲述了Java垃圾回收器的定义、性能评估工具、回收算法等等内容,为大家全面解答垃圾回收器的相关问题。
6648
2019-08-20 15:55:44
自学Java比培训的学习效果差吗?
自学Java比培训的学习效果差吗?答案不是一定的,毕竟每个人的自学能力都不一样,而且每家培训机构的教学实力也不能一概而论。这里以博学谷的教学内容为例,比起大部分自学者的埋头苦学,博学谷的Java教学有着三点无可比拟的优势,即知识点更系统,更前沿,且与实战项目结合。下面详细来谈谈比起自学参加Java培训的优势。
5748
2019-10-28 16:41:46
Java语言发展史及发展前景分析
Java语言发展史及发展前景分析,Java面向对象编程语言出生于1995年5月,Java功能强大和简单易用,应用领域非常广泛。Java语言具有安全、可靠等优势,且属于分布式、多线程和面向对象语言,对于这方面的人才需求量很大。
8968
2020-08-03 15:31:48
进阶Java中级程序员学习路线知识点汇总
企业对于中级程序员的任职要求:有两年以上Java开发经验,熟悉设计模式;熟练使用MySQL或Oracle数据库,熟练使用tomcat应用程序服务器;熟悉hibernate,spring,struts或ibatis 等主流技术框架;使用eclipse、svn、cvs、pl/sql等工具;有丰富的J2EE开发经验;有工业信息化开发经验或熟悉Modbus、OPC协议者优先。
7906
2020-08-28 16:11:03
