1

线程池的实现思想:管理一个任务队列,一个线程队列,然后每次取一个任务分配给一个线程去做,循环往复

线程池的组成

  • 线程池管理器:初始化和创建线程,启动和停止线程,调配任务;管理线程池
  • 工作线程:线程池中等待并执行分配的任务
  • 任务接口:添加任务的接口,以提供工作线程调度任务的执行。
  • 任务队列:用于存放没有处理的任务,提供一种缓冲机制,同时具有调度功能,高优先级的任务放在队列前面

任务队列,存储需要处理的任务,由工作的线程来处理这些任务
通过线程池提供的 API 函数,将一个待处理的任务添加到任务队列,或者从任务队列中删除
已处理的任务会被从任务队列中删除
线程池的使用者,也就是调用线程池函数往任务队列中添加任务的线程就是生产者线程
工作的线程(任务队列任务的消费者) ,N个
线程池中维护了一定数量的工作线程,他们的作用是是不停的读任务队列,从里边取出任务并处理
工作的线程相当于是任务队列的消费者角色,
如果任务队列为空,工作的线程将会被阻塞 (使用条件变量 / 信号量阻塞)
如果阻塞之后有了新的任务,由生产者将阻塞解除,工作线程开始工作
管理者线程(不处理任务队列中的任务),1个
它的任务是周期性的对任务队列中的任务数量以及处于忙状态的工作线程个数进行检测
当任务过多的时候,可以适当的创建一些新的工作线程
当任务过少的时候,可以适当的销毁一些工作的线程

线程池工作的四种情况

  • 没有任务要执行,缓冲队列为空
  • 队列中任务数量,小于等于线程池中线程任务数量
  • 任务数量大于线程池数量,缓冲队列未满
  • 任务数量大于线程池数量,缓冲队列已满

线程池的优点

  • 降低资源消耗。通过重复利用已创建的线程降低线程创建和销毁造成的消耗。
  • 提高响应速度。当任务到达时,任务可以不需要的等到线程创建就能立即执行。
  • 提高线程的可管理性。线程是稀缺资源,如果无限制的创建,不仅会消耗系统资源,还会降低系统的稳定性,使用线程池可以进行统一的分配,调优和监控。

Simple
10 声望4 粉丝