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 如侵犯您的版权,请留言回复原文章的地址,我们会给您删除此文章,给您带来不便请您谅解!

上一篇:Linux(程序设计):26---字符集与字符编码概述(附Unicode字符集实现原理)
下一篇:Linux(程序设计):25---gcc/g++编译器提供的原子操作(__sync_xxx)

发表评论

最新留言

关注你微信了!
[***.104.42.241]2024年04月18日 09时08分30秒