1. 不使用线程池的问题
void handle_request()
{
std::thread t([]{
// 干活
});
t.detach();
}
问题很明显:
- ❌ 频繁
new thread / destroy thread,开销大 - ❌ 线程数量不可控,可能把系统拖死
- ❌ 不好统一管理、退出、回收
2. 线程池的核心模型
线程池 ≈ 三样东西
+--------------------+
| Task Queue | <- function<void()>
+--------------------+
▲
|
+--------------------+
| Worker Threads | 多个 while(true)
+--------------------+
▲
|
+--------------------+
| PushBack / Submit |
+--------------------+
3. 最小完整的线程池实现
3.1 定义线程池类
ThreadPool.h
#ifndef THREADPOOL_H
#define THREADPOOL_H
#include <vector>
#include <thread>
#include <queue>
#include <functional>
#include <mutex>
#include <condition_variable>
class ThreadPool
{
public:
using Task = std::function<()>;
;
~();
;
:
std::vector<std::thread> m_workers;
std::queue<Task> m_tasks;
std::mutex m_mutex;
std::condition_variable m_cond;
m_stop;
};

