java中线程池参数设置

java中线程池参数设置本文主要介绍线程池是解决了哪些问题以及线程池中的corePoolSize(核心线程数),queueCapacity(等待队列的长度),maximumPoolSize(最大核心线程数)。本文不会对线程池各个参数介绍,假定你已经了解了线程池各个参数的含义。1为什么要有线程池呢?当前实际应用中,经常会遇到单个请求处理时间短但请求量巨大但问题,简单说就是qps很高,平响时间很短的情况。…

大家好,又见面了,我是你们的朋友全栈君。

    本文主要介绍线程池是解决了哪些问题以及线程池中 的corePoolSize(核心线程数),queueCapacity(等待队列的长度),maximumPoolSize(最大核心线程数)。本文不会对线程池各个参数介绍,假定你已经了解了线程池各个参数的含义。

1 为什么要有线程池呢?

当前实际应用中,经常会遇到单个请求处理时间短但请求量巨大但问题,简单说就是qps很高,平响时间很短的情况。这些情况下如果采用来一个任务就新建一个线程处理,那么会有什么问题呢?

1、每个任务新建一个线程,qps越高,就越消耗cpu资源新建线程;平响很短也需要cpu不断的销毁线程。从而会大量消耗cpu资源

2、创建的线程越多,cpu在处理任务时,线程切换相对更加频繁。导致cpu浪费在线程切换上的时间就会变长,从而会增加平响时间。

3、每个线程的创建都是要消耗内存资源的。高qps情况下容易出现OOM(unable to create new native Thread)

4、操作系统本身也不允许线程无限对增长

基于以上4个问题,线程池应运而生。

线程池中核心线程数能够重复使用,应对高qps无须频繁新建线程,进而减少线程之间切换的耗时;阻塞队列能够暂时缓存新到任务,作为新建线程的缓冲池。

2 线程池核心参数的计算

先列出计算公式,然后举例解释说明

2.1 核心线程数

corePoolSize=20% * taskNum/(单线程/AR)=20% * 任务数 * 平响

taskNum是指任务数量/请求数量等,可以简单理解成是qps,

AR是指每个任务的平均处理时间,

20%是根据8020定律得来的,简单理解是80%的情况下,核心的任务数大约占到20%

2.2 工作队列长度

queueCapacity=(corePoolSize/AR)* MR

corePoolSize为上面计算出来的核心线程数,

AR是指每个任务的平均处理时间,

MR表示任务能够接受的最大响应时间

2.3 最大核心线程数

maximumPoolSize=(taskNum-queueCapacity)/(单线程/AR)

taskNum是指任务数量/请求数量等,可以简单理解成是qps,

queueCapacity为等待队列的长度,

AR是指每个任务的平均处理时间,

2.4 举例

假定任务数是100个/s,平均响应时间是0.1s,能够接受的最大响应时间是0.5s则

corePoolSize=20% * taskNum/(单线程/AR)=20% * 任务数 * 平响=20% * 100 个/s * 0.1s=2个

queueCapacity=(corePoolSize/AR)* MR=2个/0.1s *0.5s=10个

maximumPoolSize=(taskNum-queueCapacity)/(单线程/AR)=(100-10)/(1/0.1)=9个

根据上面推到就能大致算出核心参数的取值,但是是有前提假定的,即资源是无限的。根据公式算出来的只是一个理论参考值。实际线上参数配置还是要以此为基础进行微调

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/135097.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 前端第二章:8.HTML超链接代码写法;id属性

    前端第二章:8.HTML超链接代码写法;id属性一、超链接介绍0.超链接是行内元素,但是可以放块元素1.从一个页面跳转到另一个页面2.或者跳转到当前页面的其他位置3.href属性的值可以是外部网站,也可以是同一个目录下的地址文件,如xxx.html二、超链接·代码1.超链接写法:<ahref=”你想要跳转到的网址”>超链接的字样</a>2.示例(外部网站和同一个目录下的html都可以写进href名值对结构中):3.浏览器内显示(紫色字样表示你最近访问过,蓝色代表没有访问过):4.

    2022年7月12日
    14
  • 在线网站技术分析工具

    在线网站技术分析工具Wappalyzer:在线网站技术分析工具Wappalyzer网站是一个可以分析不同网站所使用的各种技术的工具,对于有自身经验的网站开发者而言可以通过代码开分析网站的构架和所采用的技术,不过现在你可以通过工具来获得网站技术的参数报告了。Wappalyzer工具致支持分析目标网站所采用的平台构架、网站环境、服务器配置环境、JavaScript框架、编程语言等参数,同时

    2022年5月4日
    46
  • Java程序设计(基础)- 数组

    Java程序设计(基础)- 数组

    2021年7月21日
    50
  • ant下载地址

    ant下载地址http://ant.apache.org/bindownload.cgi

    2022年7月15日
    20
  • 指令周期的四个阶段_单片机指令周期与机器周期

    指令周期的四个阶段_单片机指令周期与机器周期时钟周期时钟周期也称为振荡周期,定义为时钟脉冲的倒数(可以这样来理解,时钟周期就是单片机外接晶振的倒数,例如12M的晶振,它的时间周期就是1/12us),是计算机中最基本的、最小的时间单位。在一个时钟周期内,CPU仅完成一个最基本的动作。对于某种单片机,若采用了1MHZ的时钟频率,则时钟周期为1us;若采用4MHZ的时钟频率,则时钟周期为250ns。由于时钟脉冲是计算机的基本工作脉冲…

    2022年10月13日
    0
  • 小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onUnload)[通俗易懂]

    小程序生命周期(onLaunch、onShow、onHide、onReady、onLoad、onUnload)[通俗易懂]onlaunch:当小程序初始化完成时,会触发onLaunch(全局只触发一次)(app.js);onLoad:页面加载小程序注册完成后,加载页面,触发onLoad方法。一个页面只会调用一次,可以在onLoad中获取打开当前页面所调用的query参数(页面js)。onShow:页面显示页面载入后触发onShow方法,显示页面。每次打开页面都会调用一次(比如当小程序有后台进入到…

    2022年6月20日
    94

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号