线程池复习

手写线程池 - C语言版 | 爱编程的大丙 (subingwen.cn)

  1. 线程池原理

我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行一个时间很短的任务就结束了,这样频繁创建线程就会大大降低系统的效率,因为频繁创建线程和销毁线程需要时间。

那么有没有一种办法使得线程可以复用,就是执行完一个任务,并不被销毁,而是可以继续执行其他的任务呢?

线程池是一种多线程处理形式,处理过程中将任务添加到队列,然后在创建线程后自动启动这些任务。线程池线程都是后台线程。每个线程都使用默认的堆栈大小,以默认的优先级运行,并处于多线程单元中。如果某个线程在托管代码中空闲(如正在等待某个事件),则线程池将插入另一个辅助线程来使所有处理器保持繁忙。如果所有线程池线程都始终保持繁忙,但队列中包含挂起的工作,则线程池将在一段时间后创建另一个辅助线程但线程的数目永远不会超过最大值。超过最大值的线程可以排队,但他们要等到其他线程完成后才启动。

在各个编程语言的语种中都有线程池的概念,并且很多语言中直接提供了线程池,作为程序猿直接使用就可以了,下面给大家介绍一下线程池的实现原理:

条件变量:

唤醒:

相关推荐
脸大是真的好~9 小时前
黑马JAVAWeb-01 Maven依赖管理-生命周期-单元测试
java·maven
zhangkaixuan45610 小时前
Apache Paimon 查询全流程深度分析
java·apache·paimon
cici1587411 小时前
MyBatis注解的运用于条件搜索实践
java·tomcat·mybatis
wangqiaowq11 小时前
StarRocks安装部署测试
java·开发语言
计算机学姐11 小时前
基于SpringBoot的高校社团管理系统【协同过滤推荐算法+数据可视化】
java·vue.js·spring boot·后端·mysql·信息可视化·推荐算法
缺点内向15 小时前
C#: 高效移动与删除Excel工作表
开发语言·c#·.net·excel
工业甲酰苯胺15 小时前
实现 json path 来评估函数式解析器的损耗
java·前端·json
老前端的功夫15 小时前
Web应用的永生之术:PWA落地与实践深度指南
java·开发语言·前端·javascript·css·node.js
@forever@15 小时前
【JAVA】LinkedList与链表
java·python·链表
LilySesy15 小时前
ABAP+WHERE字段长度不一致报错解决
java·前端·javascript·bug·sap·abap·alv