线程池配置介绍

news2025/2/22 7:06:07

一、前言

我们收银台项目为了架构简单,一些异步化任务(如下单完成扣减库存、发送邮件等等),没有使用MQ而是直接启动线程来做,但如果随意使用线程对系统性能反而会有影响,当线程数量大到一定的时候会耗尽CPU和内存资源,并且创建和销毁线程也需要时间,大量线程回收会造成GC的压力,所以一般项目中都统一使用一个线程池集中管理所有线程的创建和回收。

注:因为今天发现项目中使用了两个线程池,做了优化后所以有了这篇文章。

二、线程和线程池对比例子

注:直接使用线程,在我本机运行创建了2000多个线程然后直接OOM了。

注:使用线程池,没有产生OOM,每次只有10个线程在运行,其它放在线程池的任务队列中等待执行。

三、CPU

  • 物理CPU数(physical cpu)):指主板上实际插入物理CPU个数。

    cat /proc/cpuinfo | grep "physical id" | sort | uniq | wc -l

  • 核数(Core):在单个物理CPU增加核心,也就是出现双核或多核,这样一个双核CPU同一时间可以运行两个进程/线程。

    cat /proc/cpuinfo | grep "cpu cores" | uniq

  • 逻辑处理器数(Processor):在单个core为了提高处理能力逻辑上划分为多个。

    cat /proc/cpuinfo | grep "processor" |  wc -l

获取JVM可用的核心数

Runtime.getRuntime().availableProcessors()

线程任务分为以下两类,

  • CPU密集型

    CPU密集型任务有大量计算,消耗CPU资源,比如视频的编解码这种都是比较耗时间的操作,线程任务越多花在任务切换的时间就越多,应该减少线程的数量,CPU密集型任务线程数应该等于CPU的核心数。

  • IO密集型

    IO密集型CPU消耗比较少,大部分时间都在等待IO,线程越多效率越高但也有限度,我们一般应用都是属于这种,核心线程数=CPU核心数*2.

四、线程池配置例子

线程池配置参数说明

  • corePoolSize-核心线程数

         核心线程即使没有任务执行也会一直存活,当线程数小于核心线程数即使有空闲的线程也会创建新的线程以尽量达到核心线程数。注:这和连接中的最小连接数不一样。

  • queueCapacity-任务队列容量

          当核心线程数达到最大时,新的任务会放在队列中等待执行,即当你设置的队列容量比较大时,一般活动的线程数会等于或小于核心线程数。

  • maxPoolSize-最大线程数

          当线程数大于corePoolSize且任务队列已满,线程池会创建新的线程来处理。

当线程数等于maxPoolSize且任务队列已满,线程池会抛出异常拒绝执行任务。

  • keepAliveSeconds-线程空闲时间

        当线程空闲时间达到设置的值,线程会自动退出。如果设置了allowCoreThreadTimeout=true,则核心线程空闲也会退出。

线程池使用例子

ThreadPoolTaskExecutor执行顺序

1、当线程数小于corePoolSize,创建新的线程。

2、当线程数大于等于corePoolSize,且任务队列未满时,将任务放入任务队列

3、当线程数大于corePoolSize,且任务队列已满时,

若线程数小于maxPoolSize,则创建线程

若线程数等于maxPoolSize,则拒绝任务,抛出异常。

ThreadPoolExecutor.java对应核心源代码如下。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1097338.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

配置中心比较Apollo与Nacos

1、Nacos Nacos 致力于帮助您发现、配置和管理微服务。Nacos 提供了一组简单易用的特性集,帮助您实现动态服务发现、服务配置管理、服务及流量管理。 Nacos 帮助您更敏捷和容易地构建、交付和管理微服务平台。 Nacos 是构建以“服务”为中心的现代应用架构(例如微服…

【发布】Photoshop ICO 文件格式插件 3.0

备注:本文原文首发于博客园: https://www.cnblogs.com/hoodlum1980/p/17766287.html 【简介】 Photoshop ICO 插件是为 Photoshop 开发的功能扩展插件,使得 Photoshop 可以直接读写 ICO 格式文件。由于 Photoshop 具有强大的像素位图编辑功…

企业订货系统常见问题与解决方案|网站定制搭建|小程序APP开发

企业订货系统常见问题与解决方案|网站定制搭建|小程序APP开发 在企业经营中,订货系统是一个非常重要的工具,它可以帮助企业快速地获取客户需求,制定生产计划,提高供应链效率,帮助企业快速、准确地计算出所需物资的数量…

人声分离软件:iZotope RX 10 (WinMac) 中文汉化版

iZotope RX 10是一款在音频修复和增强领域中非常出色的软件。它提供了一套全面的音频问题解决方案,为后期制作专业人员、音频工程师和视频编辑者解决各种棘手问题。 iZotope RX 10的主要特点包括: 声音修复功能:可以去除不良噪音、杂音、吱吱…

“氛围感 真环绕”可拆卸自由观影新物种 ——索尼发布“积木音响”HT-AX7

2023年10月16日,索尼(中国)有限公司发布新款蓝牙音响——“积木音响”HT-AX7。该音响采用索尼360SSM技术(360空间声场映射技术,简称360SSM)和独特的可拆卸结构设计,在实现传统音响的功能基础上,进一步为用户提供了创新式可移动多场…

内容监管新纪元:探索TikTok AIGC的应用与挑战

在当今数字时代,社交媒体已成为人们分享生活、观点和创意的主要平台。而TikTok,作为短视频领域的领军者,一直在不断创新,以满足用户的需求。最近,TikTok引入了一项新功能,旨在标记由人工智能生成的内容&…

Qt实现三次样条Cardinal曲线

目录 1. 前言 2. 预备知识 3. 代码实现 1. 前言 在设计矢量图案的时候,我们常常需要用到曲线来表达物体造型,单纯用鼠标轨迹绘制显然是不足的。于是我们希望能够实现这样的方法:通过设计师手工选择控制点,再通过插值得到过控制…

全天在线的健康小助手,dido E55S Pro智能手表体验

如今只需要借助一块具有健康监测功能的智能手表,我们就可以轻松记录自己的日常健康数据,像是心率、血压和血氧等,通过每天规律性评估,我们可以及时发现身体的一些变化,排除一些潜在的健康隐患。最近我尝试了一款国产的…

three.js学习-智慧城市

前言 在前面基础知识(摄像机,渲染器,轨道控制器,坐标轴,场景适配,渲染循环、几何体、材质、光等)有了基础了解后,还需要对着色器(坐标)有一定的学习了解然后就…

关于Python爬虫就业与兼职方向

Python是一种强大的编程语言,可用于各种应用,如数据分析、机器学习、Web开发等。因此,越来越多的人开始学习Python,同时也有越来越多的Python引流兼职和就业机会出现。本文将探讨Python引流兼职和就业的情况。 Python引流兼职 P…

MacOS无法打开pkg,因为它来自身份不明的开发者。

解决方案: 低版本MacOS: 高版本MacOS:

源码分析RocketMQ之TransactionMQProducer-事物消息

Apache RocketMq 在4.3.0版本中已经支持分布式事物消息,采用了2PC的的思想实现提交事物消息,同时增加一个补偿逻辑来处理二阶段超时或者失败的消息。 一、事物消息生产者:TransactionMQProducer 发送事物消息 TransactionMQProducer#sendMessage…

手机通过WiFi连接调试UR机器人

1.测试物料 1.1ur机器人 https://item.taobao.com/item.htm?spma1z10.1-c.w4004-25069442759.18.2ff56d6bmuxX0Z&id740002623764 1.2 路由器(TPLINK) https://detail.tmall.com/item.htm?abbucket7&id548610924784&ns1&spma21n57.1.…

性能超越 Clickhouse | 物联网场景中的毫秒级查询案例

1 物联网应用场景简介 物联网(Internet of Things,简称 IoT)是指通过各种信息传感、通信和 IT 技术来实时连接、采集、监管海量的传感设备,从而实现对现实世界的精确感知和快速响应,继而实现自动化、智能化管理。在查…

DITA-OT 4.0新特性 - PDF themes,定制PDF样式的新方法

随着DITA-OT 4.0的发布,它提供了一种新的定制PDF样式方法,这种方法就是PDF theme。这篇文章来聊一聊这种定制PDF输出的新方法和实验结果。 在进入PDF theme细节之前,为各位读者梳理一下DITA-OT将DITA和Markdown发布成PDF的几种方法。 - 1 …

『Linux升级路』基本指令

🔥博客主页:小王又困了 📚系列专栏:Linux 🌟人之为学,不日近则日退 ❤️感谢大家点赞👍收藏⭐评论✍️ 目录 一、认识操作系统 📒1.1什么是操作系统 📒1.2操作系统…

Day15|104.二叉树的最大深度

一、104.二叉树的最大深度 题目链接:https://leetcode.cn/problems/maximum-depth-of-binary-tree/ 文章链接:https://programmercarl.com/0104.%E4%BA%8C%E5%8F%89%E6%A0%91%E7%9A%84%E6%9C%80%E5%A4%A7%E6%B7%B1%E5%BA%A6.html#%E7%9B%B8%E5%85%B3%E9%…

Bootstrap的徽章样式设计,徽章常用作作为显示未读内容或动态计数内容

Bootstrap的徽章样式&#xff0c;通过添加类badge来实现。 目录 01-往标题中添加徽章02-给按钮、链接添加徽章03-设置徽章的颜色04-设置胶囊形徽章 01-往标题中添加徽章 通常在<span>标签添加类badge实现。 示例代码如下&#xff1a; <!DOCTYPE html> <html&g…

二维码智慧门牌管理系统:解决公安标准地址与实际楼栋名称的差异

文章目录 前言一、二维码智慧门牌管理系统的核心功能二、广泛应用领域 前言 在当今信息化社会&#xff0c;精准的地标信息是日常生活中不可或缺的部分。特别是在小区管理中&#xff0c;精准的楼栋名称和地址信息显得尤为重要。但实际上&#xff0c;公安标准地址与实际楼栋名称…