首页
找靠谱产品
找解决方案
找靠谱公司
找案例
找对的人
专家智库
悬赏任务
SAAS
ToB门户
了解全球最新的ToB事件
论坛
潜水/灌水快乐,沉淀知识,认识更多同行。
ToB圈子
加入IT圈,遇到更多同好之人。
微博
Follow
记录
Doing
博客
Blog
文库
业界最专业的IT文库,上传资料也可以赚钱
下载
分享
Share
排行榜
Ranklist
相册
Album
应用中心
qidao123.com ToB IT社区-企服评测·应用市场
»
论坛
›
数据库
›
Oracle
›
linux网络编程11——线程池
返回列表
发新帖
linux网络编程11——线程池
[复制链接]
发表于 2025-11-7 00:21:56
|
显示全部楼层
|
阅读模式
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要
登录
才可以下载或查看,没有账号?
立即注册
×
1. 线程池
1.1 池化技能原理
池化技能
当一个资源或对象的创建大概烧毁的开销较大时,可以利用池化技能来保持肯定命量的创建好的对象以供随时取用,于是就有了池式结构。常见的池式结构包罗线程池、内存池和毗连池。
池化技能应用的条件条件重要包罗三个,总结一下,以供影象:
资源是可复用的
。在盘算机中,大部分资源都是可复用的,比方内存、线程、历程、tcp毗连等。
资源可以长时间生存
。像分配的内存块、已创建的线程、创建的TCP毗连,都是可以长时间存在。
资源创建和烧毁的开销较大
。如动态内存分配,涉及体系调用和上下文切换,开销较大。
1.2 线程池原理
线程池
线程池是一种维持管理固定命量线程的池式结构。本文解说了线程池的结构计划和实现。
下图是一个线程池的范例机构:
此中重要包罗三个部件:
生产者线程
,是线程池的利用者,它通过向任务队列转达任务交给消耗者线程实行。
任务队列
。是一个先辈先出的队列,由于插入和删除元素都只必要在一段举行读写,因此临界区很短,比力高效。
消耗者线程
,负责从任务队列中取出任务并实行。
下图是一个消耗者线程的状态转换图。从图中可以看到,当任务队列不为空时,消耗者线程就不绝从中取出任务并实行,否则就会陷入期待态。
线程池的作用
性能
优化
,异步实行耗时任务,不外度占用核心线程,可以大概进步相应速率和
性能
。耗时任务可来自于:IO麋集型任务(如网络IO和磁盘IO)、CPU麋集型任务。
并发实行
,充实利用多核,并发实行核心业务。
复用线程资源
,镌汰创建和烧毁线程的开销。
线程数量怎样确定
线程数量取决于
任务范例
和
cpu核心数量
。
cpu麋集型:cpu核心数量
io麋集型: cpu核心数量 * (线程期待时间+cpu运算时间) / cpu运算时间
1.3 线程池的应用场景
1.3.1 nginx中的线程池
nginx中的线程池被用于处理惩罚文件IO。nginx重要有两个
功能
,分别是反向署理和提供静态文件资源。
在文件IO中,必要通过内核调用发送数据,涉及到内核态和用户态之间的上下文切换以及数据向内核缓冲区的传输,如果这些利用放在主线程实行将会导致肯定的期待时间,减低了相应速率。
因此nginx利用线程池来分离耗时的利用,尤当时文件IO,制止其对主线程的干扰,从而提升 Nginx 的团体
性能
和相应服从。
1.3.2 redis中的线程池
Redis 默认环境下是单线程的,即它仅开启一个主线程来处理惩罚全部的哀求。这也是 Redis 不绝以来的计划理念,即利用单线程模子实现高性能。
不外,Redis 在 6.0
版本
中引入了
多线程
支持,用于处理惩罚客户端的网络读写(如数据的读取、协议分析等),这可以提升在高并发环境下的网络 I/O 性能。
redis的线程池重要用于IO读写和协议分析,不负责实行利用。
1.4 线程池的实现
下面是一个利用C++11写的利用壅闭队列实现的线程池。
先看
代码
,然后举行解说。
#include <stdio.h>
#include <chrono>
#include <condition_variable>
#include <functional>
#include <mutex>
#
复制
代码
回复
使用道具
举报
返回列表
浏览过的版块
数据仓库与分析
分布式数据库
DevOps与敏捷开发
SQL-Server
物联网
移动端开发
Java
云原生
容器及微服务
三尺非寒
+ 我要发帖
登录后关闭弹窗
登录参与点评抽奖 加入IT实名职场社区
去登录
微信订阅号
微信服务号
微信客服(加群)
H5
小程序
快速回复
返回顶部
返回列表