java线程池参数_java线程池参数设置原则,如何设置线程池参数比较合理?[通俗易懂]

java线程池参数_java线程池参数设置原则,如何设置线程池参数比较合理?[通俗易懂]线程池的参数应该怎样设置呢?相信对于很多的人来说这也是一个比较难的问题,下面就让我们一起来解决一下,究竟应该如何设置线程池的参数才是最合理的吧!首先在设置参数的时候,有以下的几点是我们需要考虑到的!1、下游系统抗并发的能力多线程给下游系统造成的并发等于你设置的线程数例:假如,是多线程访问数据库,那么就得考虑数据库的连接池大小设置,数据库并发太多影响其qps,会将数据库打挂等问题。假如,是访问下游系…

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

线程池的参数应该怎样设置呢?相信对于很多的人来说这也是一个比较难的问题,下面就让我们一起来解决一下,究竟应该如何设置线程池的参数才是最合理的吧!

首先在设置参数的时候,有以下的几点是我们需要考虑到的!

1、下游系统抗并发的能力

多线程给下游系统造成的并发等于你设置的线程数

例:

假如,是多线程访问数据库,那么就得考虑数据库的连接池大小设置,数据库并发太多影响其qps,会将数据库打挂等问题。

假如,是访问下游系统的接口,那么就得考虑下游系统是否可以抗得住这么多的并发量,不可以将下游系统打挂了。

2、CPU使用率

在线程数设置的比较大的时候,那么就会出现以下的几个问题:

(1)线程的初始化,切换,销毁等操作会消耗比较多的cpu资源,从而使得cpu利用率一直维持在比较高的水平。

(2)线程数比较大的时候,任务会短时间迅速执行,任务的集中执行会给cpu造成比较大的压力。

(3)任务的集中支持,会使得cpu的使用率呈现锯齿状,也就是说在短时间内cpu升高,之后,迅速下降到闲置状态。

cpu使用的不合理,应该减小线程数,让任务在队列等待,使得cpu的使用率应该持续稳定在一个合理,平均的数值范围。

所以,在cpu在够用的时候,不应该过大,注意,并不是越大越好。

这个时候,可以通过上线之后,观察机器的cpu使用率和cpu负载,观察这两个参数来判断线程数是否合理。

能够通过命令查看cpu使用率是不是主要花在线程切换上。

cpu负载是正在执行的线程和等待执行的线程之和。

注意了,这里的等待指的是线程处在running状态,可是,还没有被cpu调度的等待,负载较高,也就意味着cpu竞争激烈,进而的说明,线程设置的比较大,在抢cpu资源。

负载的值通常约等于cpu核数是比较合理的数值。

3、线程池中执行的任务性质

计算密集型的任务比较占cpu,所以说,通常线程数设置的大小等于或者是略微大于cpu的核数。

可是,IO型任务主要时间消耗在IO等待上,cpu压力不是很大,所以,线程数一般设置的比较的大。

例:

多线程访问数据库,数据库有128个表,这样的话,就直接考虑使用128个线程。

4、内存使用率

线程数过多以及队列的大小对于这个数据都会造成影响。

队列的大小应该通过前期计算线程池任务的条数,来合理的设置队列的大小,不适合太小,让它不会溢出,因为,溢出会走拒绝策略,多多少少对于它的性能会造成一定的影响,与此同时,复杂度也会被增加,所以,这里需要我们好好的考量拒绝策略的选择。

拒绝策略包括了AbortPolicy(抛异常), CallerRunsPolicy(主线程执行) 和

DiscardPolicy(丢弃),也不适合过大,过大的话也用不上,还会消耗比较大的内存。

以上的四点是我们一定要去考虑的,之后给大家介绍一个很多人都会容易犯的错误。

如下:

线程池的配置

这里的话,发现任务执行的比较慢,机器的cpu,内存等也比较的低,所以,做出了加大线程的决定。

大约还需要100个线程,所以修改配置:

问题:

线程池是不是要创建新的线程,要做以下考虑:

1、假如,线程数小于corePoolSize,那么就直接添加新的线程。

2、假如,线程数大于等于corePoolSize,那么就放进队列进行等待,假如,放进队列成功了,那么就不添加新的线程。

3、假如对列满了,线程数小于maxPoolSize,那么就会新建线程,假如,大于maxpoolSize,那么就会走到拒绝策略。

所以,队列设置较大,一般来说是不会满,所以线程数其实是一直达不到maxPoolSize的,所以,其实一致用的是50个线程。

解决:

将核心线程和最大线程设置成一个值,都为100就可以了。

bbca0e2252eaa0d348a42fc5d09173d7.png

以上就是对于线程池参数设置的一个简单介绍了,你都了解了吗?更多内容,请继续关注奇Q工具网的常见问题栏目了解吧。

推荐阅读:

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

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/134907.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 不是单组分组函数「建议收藏」

    不是单组分组函数「建议收藏」问题:一:SELECT tablespace_name, SUM(bytes) freeFROM dba_free_space不是单组分组函数原因: 1、如果程序中使用了分组函数,则有两种情况可以使用:程序中存在group by,并指定了分组条件,这样可以将分组条件一起查询出来改为:  SELECT tablespace_name, SUM(bytes) freeFROM dba_free_spa…

  • stn算子_STN 口袋指南

    stn算子_STN 口袋指南欢迎使用STN®!本页主要介绍STN指令式检索的基本功能。按您可能遇到问题的先后顺序(从登录STN到退出)排列信息。目录登录STN按照以下说明登录STN。界面登录方式STNExpress安装并启动软件。STN安装向导自动启动。有关连接的其他信息,请访问STNExpressSupport。STNext访问STNext。输入您的STN登录ID和密码。进入数据库在箭头提…

    2022年10月19日
  • Windows 网络通信套接字技术

    Windows 网络通信套接字技术一、TCP/IP介绍1、TCP/IP体系结构TCP/IP协议实际上就是在物理网上的一组完整的网络协议。其中TCP是提供传输 层服务,而IP则是提供网络层服务。TCP/IP协议包括如下协议,其结构如图所示。IP: 网间协议(Internet Protocol) 负责主机间数据的路由和网络上数据的存储。 同时为ICMP,TCP,UDP提供分组发送服务。用户进程通常不需要涉及这一层。ARP: …

  • linux下打开csv文件的软件,linux下的CSV文件操做[通俗易懂]

    linux下打开csv文件的软件,linux下的CSV文件操做[通俗易懂]先介绍一下什么是csv文件,这是一种简单的文本文件,也被称为逗号分隔值文件。linux主要是用于存储简单的数据,下面在weindows下用UE简单生成一下文件。vim而后用excel打开windows这就是一个简单的csv文件,每一个字符都是一个ANSI码,图中的第一行,1,2,3,4,5,7。数组1~7每个都是一个ANSI码,一个逗号也是ANSI码。函数第二行的12,13,434,45,56…

  • vim编辑器命令大全_VIM编辑器ZZ命令

    vim编辑器命令大全_VIM编辑器ZZ命令vim编辑器的常用命令,快捷键汇总

    2022年10月25日
  • Ace在线代码编辑器使用「建议收藏」

    Ace在线代码编辑器使用「建议收藏」这边文章https://blog.csdn.net/liuxiao723846/article/details/106732401介绍了Ace的使用,本文围绕Ace的api深入介绍其具体功能。官网api使用文档:https://ace.c9.io/#nav=howto1、基本配置:ace有许多的配置项可供选择,通过这些配置项可以打造自己的个性编辑器你可以通过setTheme来设置主题,需要注意的是主题文件要存在,并且需要与ace.js同级,命名规则为theme-主题名.jsedito.

发表回复

您的电子邮箱地址不会被公开。

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