关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(二)

news2024/9/24 1:17:47

文章目录

  • 前提
  • 动态减少
    • 代码解读
  • 动态增加
  • 线程池退出时发生了什么?
  • 总结
  • 附录

前提

我们在关于Hipe并发库中动态线程库DynamicThreadPond的一点解读(一)中介绍了DynamicThreadPond如何初始化,如何向任务队列中添加任务,线程池中的线程如何执行任务队列中的任务等。

这一节我们来介绍动态线程池的动态,也就是如何动态增加或减少线程池中的线程

注意:这里的动态可能和你想的动态不太一样,接下来慢慢看。

动态减少

删除线程池中的线程的示例代码如下:
请添加图片描述
代码的输出结果如下:

==========================================
*         Test DynamicThreadPond         *
==========================================

===========<[modify threads]>===========
thread-numb = 5
tasks-numb = 0
Wait for threads deleted ...
Get-Running-thread-numb-again = 0
Get-Expect-thread-numb-again = 0

===================================
*         End of the test         *
===================================

代码解读

如上所示的代码中,我们先起一个线程池,初始线程数为5,然后打印下正在运行的线程数以及任务队列中的任务数。接着向队列中添加5个任务,然后删除所有正在运行的线程。

第一个重点是:delThreads(int)函数是怎么实现的?
请添加图片描述
第二个重点是:线程池中的线程接收到通知后做了什么?
请添加图片描述
用一句话描述就是:当线程池中的线程收到通知后,会转移资源的所有权,然后退出while循环。这样的话,线程池中的线程数量就会在减少。

第三个点是:waitForThreads()函数在做什么?
请添加图片描述
waitForThreads()就是主线程阻塞,等待线程池中的线程数调整到我们相要的数量。

最后一个重点是:删除的线程要回收资源,也就是要join
请添加图片描述

综上,这就是动态减少线程池中线程数的过程。

动态增加

动态增加线程池中的线程数的,就是使用在第一节中介绍的addThreads(int)函数,如下
请添加图片描述

线程池退出时发生了什么?

线程池如何退出呢?是不是需要一个退出的接口?任务队列中的任务怎么处理?…,这些问题也值得我们关注。
请添加图片描述
代码中给我们提供了一个close的公有接口,用来关闭线程池。
很好的一点是,这里还使用了RAII技术,就是说:就算不显式调用close(),当线程池离开其生命周期时,在其析构函数中也会调用close帮助我们释放资源。

总结

以上就是本节的所有内容。然后可以解释下开头的那句话:

这里的动态可能和你想的动态不太一样。

在我没有阅读代码之前,我一直以为动态减少的那些线程会保存起来,待需要动态增加时,再重新拿出来使用。阅读完代码后,才发现自己理解错了。减少的线程会被join,增加线程时会重新创建线程。

附录

如果我们要动态改变线程数,不建议直接使用addThreadsdelThreads这两个函数,同时这两个函数应该被声明为private

因为线程池给我们提供了一个动态调整的函数,如下所示:
请添加图片描述

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

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

相关文章

机器学习——第十二章 计算学习理论

目录 12.1 基础知识 12.2 PAC学习 12.3 有限假设空间 12.3.1 可分情形 12.3.2 不可分情形 12.4 VC维 12.5 Rademacher复杂度 12.6 稳定性 12.1 基础知识 计算学习理论(computational learning theory)研究的是关于通过"计算"来进行"学习"的理论…

SAP无参考收货

其他收货 如果我们未参考其他凭证&#xff08;采购订单、生产订单或预留&#xff09;输入货物移动&#xff0c;则我们将讲到其他收货。因为在实际过帐之前&#xff0c;系统不会存储任何物料、数量、交货日期、接收工厂或来源方面的信息&#xff0c;所以此类收货属于计划外货物…

一文入门re 正则表达式

一、常用方法 &#xff08;一&#xff09;匹配 一般使用方法 第一个参数&#xff1a;正则模式 第二个参数&#xff1a;需要处理的字符串 第三个参数&#xff1a;附加处理方法result从任意位置开始匹配&#xff0c;返回match&#xff0c;没有匹配到返回None result re.searc…

MiniCPM-V: A GPT-4V Level MLLM on Your Phone论文阅读

大模型的趋势&#xff1a;模型性能越来越好&#xff0c;模型参数变小&#xff0c;端边设备计算能力变强。 MiniCPM-V优点 结果好、OCR能力突出、多分辨率、多语言、易于部署 模型结构 图片encoder适用vit。输入整体以及切片。切片使用自适应算法&#xff0c;通过计算分数&am…

揭秘图数据库:如何颠覆社交网络分析的游戏规则

在当今信息化时代&#xff0c;社交网络的数据量以指数级的速度增长&#xff0c;人们在社交网络中产生了海量的交互数据。如何从这些复杂的数据中提取有价值的信息&#xff0c;成为了数据科学和社交网络分析领域的一大挑战。图数据库作为一种有效的数据管理和分析工具&#xff0…

Anzo Capital视角下马丁格尔交易策略的利与弊

在Anzo Capital&#xff0c;我们深入探讨了马丁格尔交易策略的多面性。这种策略因其简单性而受到一些交易者的欢迎&#xff0c;但同时也存在着不可忽视的风险。本文将客观分析其优势和潜在缺陷&#xff0c;帮助投资者在Anzo Capital平台上做出更明智的决策。 马丁格尔策略的核…

JavaEE项目总结(1)

一、在vue项目中安装axios 由于需要使用axios框架进行异步请求&#xff0c;所以需要在vue项目中安装axios框架。在官方下载速度较慢&#xff0c;所以选择更换镜像源&#xff08;我使用的是华为云镜像&#xff09; 在项目终端中输入npm config set registry http://mirrors.…

MES系统:制造业转型升级的驱动力与效益源泉

制造业之所以需要并采纳MES系统&#xff08;Manufacturing Execution System&#xff0c;制造执行系统&#xff09;&#xff0c;主要是出于以下几个方面的考虑和需求。MES系统能够为企业带来显著的好处&#xff0c;具体体现在以下几个方面&#xff1a; 制造业需要MES系统的原因…

信贷风控架构一张图

记得刚入门风控时,由于做的模型岗,总有一种不能窥探风控全貌的疑惑。随着经验的积累,以及一些岗位的体验,慢慢对风控有了更清晰的认知。本文以一张图的形式简单地呈现信贷风控架构,让你能快速窥探信贷风控全貌。 文章目录 一、什么是风险管控?二、信贷风控架构一张图三、…

PCDN日常应用--公共资源利用

1、前言 PCDN 是通过在 CDN 的边缘节点上部署代理服务器&#xff0c;来实现主动调度和传输内容的方法。当用户请求内容时&#xff0c;PCDN 将根据各个节点的负载情况、距离、传输速度等一系列因素来动态选择最优的节点来提供内容。这样的调度方式使得 PCDN 在面对大规模请求时能…

健康管理系统解决方案

产品简介 脉购CRM健康管理系统是一款集会员健康管理以及会员数字化营销于一体的系统解决方案&#xff0c;旨在帮助企业更好地提供个性化的健康服务&#xff0c;维护好会员关系&#xff0c;通过有效的营销手段增加健康会员粘性和满意度&#xff0c;最终达到业绩增长的目的。 核…

云计算第三阶段---DBA Day2 -- Day4

DBA DAY2 一、常用函数、 常用函数 按使用方式分类按用途分类 ○单行函数 ○分组函数 ○字符函数 ○数学函数 ○日期函数 字符函数实例&#xff1a; ●LENGTH(str)&#xff1a;返字符串长度&#xff0c;以字节为单位 mysql> select length(abc); --------------- | l…

【NXP-MCXA153】TFT驱动移植

介绍 GC9A01是一款1.28寸的圆形TFT显示屏模块&#xff0c;分辨率为240x240&#xff0c;支持三种颜色格式&#xff1a;RGB444、RGB565、RGB666&#xff0c;本次实验将在NXP-MCXA153开发板上移植TFT LCD驱动 移植流程 ① 绑定TFT LCD上面的GPIO&#xff0c;如SCL_PIN、SDA_PIN…

Java - File、IO流

File类 File是java.io.包下的类&#xff0c;File类的对象&#xff0c;用于代表当前操作系统的文件&#xff08;可以是文件、文件夹&#xff09; File类只能对文件本身进行操作&#xff0c;不能读写文件里面存储的数据。 创建File类的对象&#xff1a; //创建file对象//1.具体…

House of Roman / malloc_printerr间接调用malloc函数执行malloc_hook

文章目录 House of Roman介绍&#xff1a;原理&#xff1a;例子&#xff1a;思路&#xff1a;分析&#xff1a;利用&#xff1a; House of Roman 介绍&#xff1a; House of Roman 这个技巧说简单点其实就是 fastbin attack 和 Unsortbin attack 结合的一个小 trick。该技术用…

python-字符串操作(赛氪OJ)

[题目描述] 给定长度为 n 的只有小写字母的字符串 s &#xff0c;进行 m 次操作&#xff0c;每次将 [l,r] 范围内所有 c1 字符改成 c2 &#xff0c;输出操作完的字符串。输入格式&#xff1a; 第一行两个数 n , m &#xff0c; 第二行一个字符串 s &#xff0c; 之后 m 行&…

Ubuntu修改命令提示符格式PS1

命令提示符组成 通过Xshell进入Ubuntu的默认提示符是这样的 rootDESKTOP:~# root: 当前登录用户DESKTOP&#xff1a;主机名~: 当前目录名&#xff08;即用户主目录&#xff09;#&#xff1a;超级用户权限(root用户显示)$: 普通用户权限(非root用户显示) 修改命令提示符 step1…

linux 环境下 配置jenkins前端服务

前期准备 如果没有&#xff0c;需要安装插件 <b>HH:mm:ss</b> <b>HH:mm:ss.S</b> $PROJECT_NAME - Build # $BUILD_NUMBER - $BUILD_STATUS! 连接服务器的密码 测试 前端部署 需要安装nodejs的插件 执行脚本 node -v npm install rm -rf ./dist…

未解决:不同类型的数据用memcpy然后打印(printf)出问题

引子&#xff1a; 本来是搜memcpy在拷贝两个数组时两数组下标类型不同的问题&#xff0c;即&#xff0c;若一个数组是很长&#xff0c;其下标用long型&#xff0c;要将此数组的一小段拷贝到另一个数组中&#xff0c;这另一个数组的下标只需要用int型&#xff0c;不确定会不会出…

C++高性能编程:ZeroMQ vs Fast-DDS发布-订阅模式下性能对比与分析

文章目录 0. 引言1. 目标&#xff1a;ZeroMQ与Fast-DDS性能对比2. ZeroMQ vs Fast-DDS - 延迟基准测试2.1 一对一发布-订阅延迟2.2 一对多发布-订阅延迟 3. ZeroMQ vs Fast-DDS - 吞吐量基准测试4. 方法论5. 结论6. 参考 0. 引言 高要求的分布式系统催生了对轻量级且高性能中间…