ThreadPool使用方式说明

2023-12-09 06:38

本文主要是介绍ThreadPool使用方式说明,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

——转自http://blog.ithome.com.tw/index.php?op=ViewArticle&articleId=23037&blogId=1556

ThreadPool使用方式说明

為何要透過ThreadPool來管理Thread?為何要採用Pool的方式?當AP要使用Thread時不是直接New就好了嗎?

1、ThreadPool通常用來解決兩種問題:
A.效能提升
Thread本身也是一種資源,每次New Thread都會花掉系統一些成本,因此若系統作業環境是需要大量Thread來處理時(如Online交易),藉由ThreadPool來管理Thread如同藉由ConnectionPool來管理Connection一般,將可降低系統花在New Thread的成本

B.控制資源
透過ThreadPool來管理Thread可以有效控管系統資源並避免Thread無限制的產生,同時可以進行Thread量的統計


2、目前FOCAS是採用Spring提供之ThreadPoolTaskExecutor來運作
ThreadPool的管理共有3個參數可供相互設定:corePoolSize、maxPoolSize及queueCapacity,相互關係如下:
A.CorePool Size:設定ThreadPool可接受的主要Thread數量
因此若ActiveThread未超過CorePool Size,則ThreadPool會繼續New Thread

B.QueueCapacity:設定當Request超過CorePool Size時,可以先暫存的數量
因此若Request已經超過CorePool Size,則ThreadPool不會再New Thread,會先將Request放置於ArrayBlockingQueue
若此設定不為正整數,則ThreadPool會採用沒有限制的LinkedBlockingQueue,同時會忽略MaxPool Size的設定,也就是說Thread會無限制產生下去

C.MaxPool Size:設定當Queue滿的時候,最大Thread的數量
因此若Request超過CorePool Size,會先放入Queue中保存,若連Queue都滿了,這時候ThreadPool會再New Thread,直到等於MaxPool Size
當Request量牴觸到MaxPool Size時,ThreadPool會將後續Request丟掉,可以實作RejectedExecutionHandler來承接這些被丟掉的Request,後續再看看是要記錄到資料庫或進行其他處置

3、因此QueueCapacity及MaxPool Size的設定必須取得平衡點
A.若使用Queue大,MaxPool Size小
可以降低CPU及資源的使用,但對Online交易來說將會造成大量Request在Queue中無法立即處理,因此若是屬於即時性不高的作業,如HouseKeeping或傳檔,為了保護系統資源不被批次無限制吃光,倒是可以採用這樣的配置

B.若使用Queue小,MaxPool Size大
可以對Request作最即時的處理,但是相對來說CPU及記憶體的使用將會昇高,因此可透過MaxPool Size來保護系統,因此若是即時性的作業如Online交易,是有回覆時間的壓力並無法在Queue中慢慢等,因此可採用這種方式

上述的行為已經在FOCAS上實側過,實際數字必須經由量測來抓才準

4.Sun網站上有針對ThreadPool做很多的說明,可以參閱
http://java.sun.com/javase/6/docs/api/java/util/concurrent/ThreadPoolExecutor.html

这篇关于ThreadPool使用方式说明的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/472849

相关文章

使用animation.css库快速实现CSS3旋转动画效果

《使用animation.css库快速实现CSS3旋转动画效果》随着Web技术的不断发展,动画效果已经成为了网页设计中不可或缺的一部分,本文将深入探讨animation.css的工作原理,如何使用以及... 目录1. css3动画技术简介2. animation.css库介绍2.1 animation.cs

CSS引入方式和选择符的讲解和运用小结

《CSS引入方式和选择符的讲解和运用小结》CSS即层叠样式表,是一种用于描述网页文档(如HTML或XML)外观和格式的样式表语言,它主要用于将网页内容的呈现(外观)和结构(内容)分离,从而实现... 目录一、前言二、css 是什么三、CSS 引入方式1、行内样式2、内部样式表3、链入外部样式表四、CSS 选

使用雪花算法产生id导致前端精度缺失问题解决方案

《使用雪花算法产生id导致前端精度缺失问题解决方案》雪花算法由Twitter提出,设计目的是生成唯一的、递增的ID,下面:本文主要介绍使用雪花算法产生id导致前端精度缺失问题的解决方案,文中通过代... 目录一、问题根源二、解决方案1. 全局配置Jackson序列化规则2. 实体类必须使用Long封装类3.

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据

Python文件操作与IO流的使用方式

《Python文件操作与IO流的使用方式》:本文主要介绍Python文件操作与IO流的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、python文件操作基础1. 打开文件2. 关闭文件二、文件读写操作1.www.chinasem.cn 读取文件2. 写

基于Go语言实现Base62编码的三种方式以及对比分析

《基于Go语言实现Base62编码的三种方式以及对比分析》Base62编码是一种在字符编码中使用62个字符的编码方式,在计算机科学中,,Go语言是一种静态类型、编译型语言,它由Google开发并开源,... 目录一、标准库现状与解决方案1. 标准库对比表2. 解决方案完整实现代码(含边界处理)二、关键实现细

PyQt6中QMainWindow组件的使用详解

《PyQt6中QMainWindow组件的使用详解》QMainWindow是PyQt6中用于构建桌面应用程序的基础组件,本文主要介绍了PyQt6中QMainWindow组件的使用,具有一定的参考价值,... 目录1. QMainWindow 组php件概述2. 使用 QMainWindow3. QMainW

使用Python自动化生成PPT并结合LLM生成内容的代码解析

《使用Python自动化生成PPT并结合LLM生成内容的代码解析》PowerPoint是常用的文档工具,但手动设计和排版耗时耗力,本文将展示如何通过Python自动化提取PPT样式并生成新PPT,同时... 目录核心代码解析1. 提取 PPT 样式到 jsON关键步骤:代码片段:2. 应用 JSON 样式到

java变量内存中存储的使用方式

《java变量内存中存储的使用方式》:本文主要介绍java变量内存中存储的使用方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、介绍2、变量的定义3、 变量的类型4、 变量的作用域5、 内存中的存储方式总结1、介绍在 Java 中,变量是用于存储程序中数据

关于Mybatis和JDBC的使用及区别

《关于Mybatis和JDBC的使用及区别》:本文主要介绍关于Mybatis和JDBC的使用及区别,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录1、JDBC1.1、流程1.2、优缺点2、MyBATis2.1、执行流程2.2、使用2.3、实现方式1、XML配置文件