Webserver 线程池详解

构建线程池的一个大致思路

  1. 设计线程池的数据结构(线程管理 任务管理 同步机制)
  2. 构造函数——初始化线程池(检查线程数和最大请求数是否合法。为线程池分配内存,创建指定数量的线程。使用 pthread_create 创建线程,并将 worker 函数作为线程入口。使用 pthread_detach 来分离线程,确保线程结束时能够自动回收资源。)
  3. 析构函数——清理资源
  4. 添加任务函数——将任务提交到任务队列(这里面注意要加锁、首先加锁保护队列,检查队列是否已满,如果队列未满,则将任务添加到队列中。)
  5. (私有成员函数)工作线程函数——从任务队列获取任务并处理(每个工作线程在 worker 函数中启动后,会调用 run 函数,run 函数的核心任务是不断地从任务队列中获取任务并执行。)

线程池的工作流程

  1. 初始化线程池:在构造函数中,线程池创建指定数量的线程,并使它们开始运行。
  2. 任务提交:主线程通过 append 函数提交任务,任务被加入到任务队列中。
  3. 任务处理:工作线程不断从任务队列中获取任务,执行任务,任务完成后继续获取下一个任务。
  4. 线程退出:当 m_stop 标志被设置为 true,线程池停止工作,工作线程退出。

线程池各部分详解

线程池的私有成员变量

线程池主要是由可以把这些私有成员变量看成三个部分

 一个是线程管理 : 线程数量,线程池的数组

一个是任务管理 : 请求队列最大数量,请求队列

还有一个是同步机制:互斥锁 信号量

线程池的公有成员函数

主要分为构造函数 析构函数和添加任务函数append

构造函数

主要启动线程池 构造函数 主要用来初始化线程池,创建工作线程并分配资源 确保线程池具备处理任务的能力。

析构函数

主要是释放线程池的资源,防止内存泄漏,回收线程池所分配的内存资源。

append函数

Append函数主要是向任务队列中添加任务,确保任务能够被工作线程执行,控制队列容量。

线程池的私有成员函数

主要供线程池内部使用有worker和run函数

worker函数

Worker为什么是静态成员函数是因为静态成员函数没有 this 指针,与线程库的要求兼容。定义为 static 让worker可以直接作为pthread_create的入口函数。

作为线程的入口函数,由 pthread_create 调用。

每个线程执行 worker,启动线程池中的任务处理逻辑

run函数

这是线程的实际任务处理逻辑,线程会不断从任务队列中获取任务并执行。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值