线程池结构

  • 任务队列

    • 通过线程池提供的 API 函数,将一个待处理的任务添加到任务队列,或者从任务队列中删除
    • 已处理的任务会被从任务队列中删除
    • 线程池的使用者,也就是调用线程池函数往任务队列中添加任务的线程就是生产者线程
  • 工作线程

    • 线程池中维护了一定数量的工作线程,他们的作用是是不停的读任务队列,从里边取出任务并处理
    • 工作的线程相当于是任务队列的消费者角色,
    • 如果任务队列为空,工作的线程将会被阻塞 (使用条件变量 / 信号量阻塞)
    • 如果阻塞之后有了新的任务,由生产者将阻塞解除,工作线程开始工作
  • 管理线程

    • 它的任务是周期性的对任务队列中的任务数量以及处于忙状态的工作线程个数进行检测当
    • 任务过多的时候,可以适当的创建一些新的工作线程
    • 当任务过少的时候,可以适当的销毁一些工作的线程

image.png