线程池 线程池英語thread pool一种线程使用模式线程过多会带来调度开销进而影响缓存局部性和整体性能而线程池维护着多个线程等待着监督管理者分配可并发执行的任务这避免了在处理短时间任务时创建与销毁线程的代价线程池不仅能够保证内核的充分利用还能防止过分调度可用线程数量应该取决于可用的并发处理器处理器内核内存网络sockets等的数量 例如对于计算密集型任务线程数上限一般取CPU逻辑核心数线程数过多会导致额外的线程切换开销 任务调度以执行线程的常见方法是使用同步队列称作任务队列池中的线程等待队列中的任务并把执行完的任务放入完成队列中 线程池模式一般分为两种HSHA半同步半异步模式LF领导者与跟随者模式 半同步半异步模式又称为生产者消费者模式是比较常见的实现方式比较简单分为同步层队列层异步层三层同步层的主线程处理工作任务并存入工作队列工作线程从工作队列取出任务进行处理如果工作队列为空则取不到任务的工作线程进入挂起状态由于线程间有数据通信因此不适于大数据量交换的场合 领导者跟随者模式在线程池中的线程可处在种状态之一领导者leader追随者follower或工作者processor任何时刻线程池只有一个领导者线程事件到达时领导者线程负责消息分离并从处于追随者线程中选出一个来当继任领导者然后将自身设置为工作者状态去处置该事件处理完毕后工作者线程将自身的状态置为追随者这一模式实现复杂但避免了线程间交换任务数据提高了CPU cache相似性在ACEAdaptive Communication Environment中提供了领导者跟随者模式实现 线程池的伸缩性对性能有较大的影响 创建太多线程将会浪费一定的资源有些线程未被充分使用 銷毀太多執行緒將導致之後浪費時間再次創建它們 创建线程太慢将会导致長時間的等待性能變差 銷毀執行緒太慢导致其它執行緒资源饥饿