高性能无锁队列 moodycamel::ConcurrentQueue
在做一些服务器的架构设计的时候,你不得不考虑现成模型的设计,将不同的业务划分到不同的线程里,如何来调度这些任务是一个值得有经验的架构师需要思考的工作。
很多开发者一说到线程的任务调度就想到了线程池,给他创建一个线程池,多个线程不断地尝试获取任务的信号,一旦线程池里有任务了就唤醒其中一个或多个子线程去执行任务。
比如这段代码:
namespace utils {
class ThreadTask {
public:
virtual int Run() = 0;
};
class ThreadPool {
public:
ThreadPool(size_t, size_t);
bool AppendTask(ThreadTask* task);
void ThreadLoop();
void Stop();
~ThreadPool();
size_t GetTasks();
private:
// need to keep track of threads so we can join them
std::vector< std::thread > workers;
// the task queue
std::queue< ThreadTask* > tasks;
size_t max_tasks;
// synchronization
std::mutex queue_mutex;
std::condition_variable condition;
bool stop;
};
}