第二篇:阿里为什么要禁用Java内置线程池?自定义线程池参数如何设置?

news2024/12/23 18:52:37

线程池基本概念不清楚的请移步:第一篇:Java中的线程池介绍(阿里为什么要禁用Java内置线程池?自定义线程池参数如何设置?)-CSDN博客

Java中为我们提供了内置线程池,为什么阿里却要严令禁止使用呢?

一、阿里为什么要禁用Java内置线程池?

我们首先看一下阿里开发手册如何说明的:

 第一点:在代码中,阿里要求,所有项目开发者都不要自己去手动创建线程而是去线程池中获取线程资源,避免频繁创建线程带来资源消耗,同时可以避免并发场景下创建大量线程而导致内存溢出的问题。

第二点:为什么不让使用Java内置的线程池而是通过ThreadPoolExecuter,也就是自定义线程池的方式来创建线程池?

主要就是因为Java内置的线程池都是创建固定的线程数量或者工作队列数量,当在并发场景下时,就会导致我们系统资源耗尽,造成内存溢出(OOM)问题。

再一个就是,线程池的线程数,工作队列数其实也和我们当前部署的机器的性能有关系,线程池的设置存在极强的环境要求,不同环境下,不同项目需求,对我们的线程池要求都是不一样的,不能一概而论,因此阿里严禁使用Java内置线程池,要求自定义线程池。

二、既然不让使用内置线程池,自定义线程池时,参数的设置有什么讲究吗?

有!讲究非常大!

自定义线程池时,我们通常从两方面考虑

  • 服务器性能
  • 业务需求

服务器性能:这个其实很好理解,cpu越多,当前机器性能越好,设置线程数也就可以越多。

最主要的是对业务需求的划分来制定参数设置:

  • 计算密集型应用:对于CPU密集型业务来说,它的特点是要进行大量的CPU计算,比如计算高等数学中学习的泰勒公式,就会非常消耗我们的CPU资源。这种CPU密集型业务虽然也可以拆成多个任务去执行,但是任务越多,切换的成本就越大。所以,我们就要最高效地利用CPU,遇到CPU密集型的业务场景时,我们需要让同时执行的任务数量等于CPU的核数
  • IO密集型应用:涉及IO操作的场景,比如包括网络IO和磁盘IO,一般都是IO密集型的业务。
    在这类场景下,CPU消耗极小,程序大部分时间都被IO操作阻塞。对于IO密集型场
    景,显然线程越多,CPU利用率越高,当然也要注意线程别太多,否则也会出现资源耗尽
    的问题。我们工作中遇到的大部分场景,都需要和磁盘、网络打交道,都属于IO密集
    型。

对于IO密集型应用,如何设置?

公式:线程数 = cpu核心数 / (1 - 阻塞系数)

cpu核心数:当前服务器cpu核心有多少个

阻塞系数:对于阻塞系数,我们可以先试着猜测,或者采用一些性能分析工具(Jmater)来确定线程花在系统IO操作上的时间与CPU密集任务所耗的时间比值,常见数值约为0.7~0.9之间。
如果任务计算时90%的时间双核CPU都在闲置,线程则应设置为20
如果任务计算时50%的时间双核CPU都在闲置,线程则应设置为4

对于计算密集型的任务,如何设置?

很简单,线程数 = N + 1  N代表cpu核心数 ,为什么要加一,多提供一个线程来执行上行文调度这种辅助操作。

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

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

相关文章

Python 数据结构和算法实用指南(一)

原文:zh.annas-archive.org/md5/66ae3d5970b9b38c5ad770b42fec806d 译者:飞龙 协议:CC BY-NC-SA 4.0 前言 数据结构和算法是信息技术和计算机科学工程学习中最重要的核心学科之一。本书旨在提供数据结构和算法的深入知识,以及编程…

kkFileView 任意文件上传致远程代码执行漏洞复现(QVD-2024-14703)

0x01 产品简介 kkFileView 是使用 spring boot 搭建的文件文档在线预览解决方案,支持主流办公文档的在线预览。 0x02 漏洞概述 2024年4月,互联网上披露kkFileView远程代码执行漏洞情报,攻击者可利用该漏洞上传恶意文件,获取操作系统权限。该漏洞利用简单,建议受影响的客…

【Linux开发 第六篇】Linux常用命令知识

常用命令知识 关机和重启用户管理用户组运行级别帮助指令文件目录类时间日期类搜索查找类压缩和解压类 关机和重启 shutdown -h now //立刻进行关机 shutdown -h 1 “1分钟后进行” //一分钟后进行关机 并向登录Linux的各个用户发送字符串 shutdown -r now //现在重新启动…

网络安全产品---态势感知EDR

态势感知 what SA,Situational Awareness 是对一定时间和空间内的环境元素进行感知,并对这些元素的含义进行理解,最终预测这些元素在未来的发展状态。 why 安全防护思想已经从过去的被动防御向主动防护和智能防护转变。如果不做到主动防御…

git工具简单使用

文章目录 git上传克隆README.gitignore常用指令冲突 git 进行版本控制的版本控制器。安装git yum install -y git 配置git git config --global user.email "youexample.com" 告诉git你的邮箱是什么?最好输入你的gitee的注册邮箱git config --global …

哈尔滨等保测评综述

​ 定级是网络安全等级保护的首要环节和关键环节,可以梳理各行业、各部门、各单位的等级保护对象类型、重要程度和数量等基本信息,确定分级保护的重点。定级不准,系统备案、建设、整改、等级测评等后续工作都会失去意义,等级…

无人机--行业生命周期分析

行业生命周期:无人机行业生命周期还相对较短,但已经经历了多个阶段的发展。从最初的军用无人机,到近年来民用无人机和商业无人机的快速发展,无人机行业正逐渐走向成熟阶段。未来随着技术的不断进步和应用领域的不断拓展,无人机行业…

浅析ARM Contex-CM3内核架构

目录 概述 1. Cortex-M3类型MCU 1.1 MCU 架构 1.2 实时性系统概念 1.3 处理器命名法 1.4 MCU的一些知识 2. Cortex-M3 概览 2.1 Cortex-M3综述 2.2 寄存器组 2.3 操作模式和特权极别 2.4 内建的嵌套向量中断控制器 2.5 存储器映射 2.6 总线接口 2.7 存储器保护单元…

9.列表渲染

列表渲染 我们可以使用 v-for 指令基于一个数组来渲染一个列表。v-for 指令的值需要使用 item in items 形式的特殊语法&#xff0c;其中 items 是源数据的数组&#xff0c;而 item 是迭代项的别名 <template><div><p v-for"item in names">{{ it…

Adobe Acrobat PDF 2024

Adobe Acrobat PDF 2024正式发布&#xff01;支持Windows和macOS系统&#xff0c;新界面做了轻微调整。 下载地址 Windows客户端&#xff1a;https://www.123pan.com/s/f43eVv-GKZKd.html macOS客户端&#xff1a;https://www.123pan.com/s/f43eVv-PKZKd.html

项目总结报告(Word)+项目总结汇报(PPT)

项目总结报告&#xff08;Word&#xff09;项目总结汇报&#xff08;PPT&#xff09; 1 引言 1.1 编写目的 1.2 背景 1.3 范围 1.4 参考资料 2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性…

Adobe Lightroom Classic v13.2 (macOS, Windows) - 桌面照片编辑

Adobe Lightroom Classic v13.2 (macOS, Windows) - 桌面照片编辑 Acrobat、After Effects、Animate、Audition、Bridge、Character Animator、Dimension、Dreamweaver、Illustrator、InCopy、InDesign、Lightroom Classic、Media Encoder、Photoshop、Premiere Pro、Adobe XD…

JS学习归纳8

这是JS基础学习的最后一部分&#xff0c;我们介绍一下简单数据类型和复杂数据类型。 一、 简单数据类型和复杂数据类型 如果有个变量我们以后打算存储为对象&#xff0c;暂时没想好放啥&#xff0c; 这个时候就给 null 1. 简单数据类型 是存放在栈里面 里面直接开辟一个空间存…

【Java框架】Spring框架(三)——Spring整合Mybatis及Spring声明式事务

目录 回顾Mybatis和新对象思路整理 Spring和MyBatis的整合步骤1. 创建Web工程&#xff0c;导入Spring和MyBatis的相关依赖2. 建立开发目录结构&#xff0c;创建实体类3. 创建数据访问接口和SQL映射语句文件4. 使用Spring配置文件配置数据源4.1 database.properties4.2spring配置…

nginx反向代理.NetCore开发的基于WebApi创建的gRPC服务

一、本文中使用的工具: Vs2022使用.NET 8.0开发基于ASP.NET Core WebApi的gRPC服务; Nginx:1.25.5,下载地址:http://nginx.org/en/download.html 二、gRPC介绍: 由 google 开发,是一款语言中立、平台中立、开源的远程过程调用(RPC)系统。在vs2022中可以直接创建gRP…

C++|stack-queue-priority_queue(适配器+模拟实现+仿函数)

目录 一、容器适配器 1.1容器适配器概念的介绍 1.2stack和queue的底层结构 1.3deque容器的介绍 1.3.1deque的缺陷及为何选择他作为stack和queue的底层默认实现 二、stack的介绍和使用 2.1stack的介绍 2.2stack的使用 2.3stack的模拟实现 三、queue的介绍和使用 …

BioTech - 使用 Amber 工具 松弛(Relaxation) 蛋白质三维结构 (Python)

欢迎关注我的CSDN:https://spike.blog.csdn.net/ 本文地址:https://spike.blog.csdn.net/article/details/137889532 Amber 工具在蛋白质 松弛(Relaxation) 过程中起着重要的作用。在分子动力学模拟中,蛋白质松弛是指模拟过程中蛋白质结构达到一个较为稳定的状态。这个过程通…

【记录】Python3|Selenium 下载 PDF 不预览不弹窗(2024年)

版本&#xff1a; Chrome 124Python 3.12Selenium 4.19.0 版本与我有差异不要紧&#xff0c;只要别差异太大比如 Chrome 用 57 之前的版本了&#xff0c;就可以看本文。 如果你从前完全没使用过、没安装过Selenium&#xff0c;可以参考这篇博客《【记录】Python3&#xff5c;Se…

EFK安装与使用!!!

一、将你的项目进行打包。 二、上传到docker&#xff0c; 启动项目 三、修改前端的代理路径 四、EFK相关配置 1、docker-compose.yml&#xff1a; version: 3 services:kibana:image: kibana:7.14.0ports:- "5601:5601"environment:- ELASTICSEARCH_HOSTShttp://19…

redhatcsa学习笔记--题目+答案

一、semanage命令 semanage命令 – 查询与修改安全上下文 semanage命令来自英文词组“SELinux manage”的缩写&#xff0c;其功能是用于查询与修改安全上下文。semanage的功能类似于chcon命令&#xff0c;它们都可以用于设置文件的SELinux安全上下文策略&#xff0c;而semana…