Linux(程序设计):66---简略版的线程池设计
发布日期:2021-06-29 22:36:38
浏览次数:2
分类:技术文章
本文共 1242 字,大约阅读时间需要 4 分钟。
一、设计线程池的优点、作用
- 在前面的文章()中我们设计过了一种线程池,但是那种线程池比较复杂代码比较多,本文介绍一个简略版的线程池
- 线程使应用能够更加充分合理的协调利用cpu 、内存、网络、i/o等系统资源。
- 线程的创建需要开辟虚拟机栈,本地方法栈、程序计数器等线程私有的内存空间。
- 在线程的销毁时需要回收这些系统资源。频繁的创建和销毁线程会浪费大量的系统资源,增加并发编程的风险。
- 另外,在服务器负载过大的时候,如何让新的线程等待或者友好的拒绝服务?这些丢失线程自身无法解决的。所以需要通过线程池协调多个线程,并实现类似主次线程隔离、定时执行、周期执行等任务。
二、线程池的设计
-
本线程池比较简单,就包括3个内容:
- 任务节点。
- 线程节点。
- 线程池。
- 任务节点:
- 功能:就是一个任务,其有一个回调函数,用于执行任务。
- 特点:当有新任务加入线程池之后,这个任务会被线程池分配给线程去处理。
//任务节点typedef struct NJOB{ void (*_jobFunc)(void *NJOB); //回调函数 void *_userData; //回调函数参数 struct NJOB *_next; struct NJOB *_prev;}NJOB;
- 线程节点:
- 功能:单个线程的表示结构体,可以用来处理任务,
- 特点:线程各自运行在自己的pthread_create()回调函数中,一直不间断的执行任务,
//线程节点typedef struct NWORKER{ pthread_t _tid; //线程节点的tid struct NWORKQUEUE *_workQueue; //该线程所属的线程池 int _terminate; //是否终止工作 struct NWORKER *_next; struct NWORKER *_prev;}NWORKER;
- 线程池:线程池对象,保存着任务和所有的线程。
//线程池(管理着所有的任务和线程节点)typedef struct NWORKQUEUE{ struct NJOB *_jobs; struct NWORKER *_workers; int _sumWorkersNum; //总共的线程数 int _freeWorkersNum; //空闲的线程数 pthread_mutex_t _mutex; //互斥锁 pthread_cond_t _cond; //条件变量}NWORKQUEUE;typedef NWORKQUEUE threadPool;
三、编程实现
- 源码下载方式:
- CSDN下载:。
- 或者公众号【多栖技术控小董】回复【13740168】获取下载链接。
运行
- 下载代码,进入目录之后输入make编译,然后运行即可
转载地址:https://dongshao.blog.csdn.net/article/details/106622568 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!
发表评论
最新留言
关注你微信了!
[***.104.42.241]2024年04月18日 09时08分30秒
关于作者
喝酒易醉,品茶养心,人生如梦,品茶悟道,何以解忧?唯有杜康!
-- 愿君每日到此一游!
推荐文章
YOLO算法(二)—— Yolov2 & yolo9000
2019-04-30
YOLO算法(三)—— Yolov3 & Yolo系列网络优缺点
2019-04-30
Python的__future__模块
2019-04-30
计算机视觉中的cost-volume的概念具体指什么(代价体积)
2019-04-30
启发函数heuristic 与 A*
2019-04-30
Image Pyramid(图像金字塔)
2019-04-30
Oracle 作业记录
2019-04-30
putty连接AWS配置(multimedia project)
2019-04-30
Hourglass Network 沙漏网络 (pose estimation姿态估计)
2019-04-30
OpenCV实战(二)——答题卡识别判卷
2019-04-30
目标检测神经网络的发展历程(52 个目标检测模型)
2019-04-30
Boundary loss 损失函数
2019-04-30
tensorflow使用tensorboard进行可视化
2019-04-30
凸优化 convex optimization
2019-04-30
数据库索引 & 为什么要对数据库建立索引 / 数据库建立索引为什么会加快查询速度
2019-04-30
IEEE与APA引用格式
2019-04-30