线程池复习

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

  1. 线程池原理

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

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

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

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

条件变量:

唤醒:

相关推荐
SimonKing1 分钟前
告别System.currentTimeMillis()!Java高精度计时最佳实践
java·后端·程序员
Dcs2 分钟前
JUnit 5架构如何用模块化颠覆测试框架?
java
肉肉不想干后端5 分钟前
gRPC服务架构整合springboot部署实践指南
java
天天摸鱼的java工程师22 分钟前
volatile关键字实战指南:八年Java开发者详解五大应用场景
java·后端
赤鸢QAQ26 分钟前
Qt小组件 - 2(布局)瀑布流布局,GridLayout,FlowLayout
开发语言·数据库·qt
小灰灰搞电子28 分钟前
Qt使用dump文件记录并查找软件奔溃信息详细教程
开发语言·qt
刃神太酷啦33 分钟前
C++ 多态详解:从概念到实现原理----《Hello C++ Wrold!》(14)--(C/C++)
java·c语言·c++·qt·算法·leetcode·面试
寻觅~流光1 小时前
封装---优化try..catch错误处理方式
开发语言·前端·javascript·typescript
wjm0410061 小时前
C++后端面试八股文
java·c++·面试