一、线程池的概念
线程开的过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护这多个线程,等待着监督管理制者分配可并发执行任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池能保证内核的充分利用,还能防止过度调用。
二、线程池的组成
1、线程池管理器
创建一定数量的线程,启动线程,调配任务,管理着线程池。
本篇线程池目前只需要启动(start()),停止方法(stop()),及任务添加方法(addTask).
start()创建一定数量的线程池,进行线程循环.
stop()停止所有线程循环,回收所有资源.
addTask()添加任务.
2.工作线程
线程池中线程,在线程池中等待并执行分配的任务.
本篇选用条件变量实现等待与通知机制.
3.任务接口
添加任务的接口,以供工作线程调度任务的执行
4.任务队列
用于存放没有处理的任务。提供一种缓冲机制
三、实现线程池的具体步骤:
1、设置一个生产者消费者队列,作为临界资源
2.初始化n个线程,并让其运行起来,加锁去任务队列去任务运行
3.当任务入队列为空的时候,所有线程阻塞
4.当生产者队列来了一个任务后,先对队列加速,把任务挂载到队列上,然后使用条件变量去通知阻塞中一个线程处理任务,当任务处理完成之后,该线程会被重新放回线程池中,以供其他的任务调用。