C++11 实现线程池
什么是线程池 线程池(thread pool)是一种线程使用模式。线程过多或者频繁创建和销毁线程会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着管理器分配可并发执行的任务。这 避免了在处理短时间任务时创建与销毁线程的代价 ,以及保证了线程的可复用性。线程池不仅能够保证内核的充分利用,还能防止过分调度。 线程池原理 预先创建预定数量的线程,将多个任务加入到任务队列。类似于生产者消费者,多个线程相当于消费者,一个任务队列充当生产者。当任务队列被塞入任务时,线程们就去竞争这些任务,但每次只有一个线程能够得到任务,该任务执行完成后,线程可以释放出来去承接下一个任务,这样保证多个任务可以并发地执行。 线程池的原理如图所示 一个任务队列有n个任务,可以通过线程池的调度分配到m个线程上去并发执行 线程池实现 机遇C++11 的线程库编写 thread_pool.hpp # ifndef _THREAD_POOL_H_ # define _THREAD_POOL_H_ # include <thread> # include <mutex> # include <atomic> # include <condition_variable> # include <functional> # include <vector> # include <queue> class