线程池复习

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

  1. 线程池原理

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

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

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

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

条件变量:

唤醒:

相关推荐
程序猿编码19 小时前
给你的网络流量穿件“隐形衣“:手把手教你用对称加密打造透明安全隧道
linux·开发语言·网络·安全·linux内核
aq553560019 小时前
编程语言三巨头:汇编、C++与PHP大比拼
java·开发语言
aq553560020 小时前
PHP vs Python:30秒看懂核心区别
开发语言·python·php
我是无敌小恐龙20 小时前
Java SE 零基础入门Day01 超详细笔记(开发前言+环境搭建+基础语法)
java·开发语言·人工智能·opencv·spring·机器学习
码云数智-大飞20 小时前
零基础微信小程序制作平台哪个好
开发语言
心态与习惯20 小时前
Julia 初探,及与 C++,Java,Python 的比较
java·c++·python·julia·比较
神仙别闹20 小时前
基于 MATLAB 实现的 DCT 域的信息隐藏
开发语言·matlab
一叶飘零_sweeeet20 小时前
优秀文章合集
java
techdashen21 小时前
Go 标准库 JSON 包迎来重大升级:encoding/json/v2 实验版来了
开发语言·golang·json
zopple21 小时前
ThinkPHP5.x与3.x核心差异解析
java·python·php