C++线程池
文章目录
C++线程池的简单实现。
完整代码:https://github.com/ocfBNj/ThreadPool
介绍
线程池(英语:thread pool):一种线程使用模式。线程过多会带来调度开销,进而影响缓存局部性和整体性能。而线程池维护着多个线程,等待着监督管理者分配可并发执行的任务。这避免了在处理短时间任务时创建与销毁线程的代价。线程池不仅能够保证内核的充分利用,还能防止过分调度。线程数一般取cpu数量+2比较合适,线程数过多会导致额外的线程切换开销。
上面是维基百科对线程池的介绍。
使用C++实现线程池
1. 查看系统支持的最大线程数量
unsigned int size = std::thread::hardware_concurrency();
使用std::thread::hardware_concurrency()获得系统支持的最大线程数量。
2. 线程池的方法和数据结构
class ThreadPool {
public:
ThreadPool(unsigned int size = std::thread::hardware_concurrency());
~ThreadPool();
// 启动一个任务
template <typename F, typename... Args>
auto start(F&& f, Args&&... args)
-> std::future<decltype(std::forward<F>(f)(std::forward<Args>(args)...))>;
private:
// 线程池中执行无限循环函数
std::vector<std::thread> pool;
// 任务队列
std::queue<std::function<void()>> taskQueue;
// 同步
std::mutex mutex;
std::condition_variable condition;
bool stop;
void infiniteLoop();
};
3. 线程池的构造函数
ThreadPool::ThreadPool(unsigned int size) : pool(size), stop(false) {
for (std::thread