在做一些服务器的架构设计的时候,你不得不考虑现成模型的设计,将不同的业务划分到不同的线程里,如何来调度这些任务是一个值得有经验的架构师需要思考的工作。
很多开发者一说到线程的任务调度就想到了线程池,给他创建一个线程池,多个线程不断地尝试获取任务的信号,一旦线程池里有任务了就唤醒其中一个或多个子线程去执行任务。
比如这段代码:
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 themstd::vector< std::thread > workers;// the task queuestd::queue< ThreadTask* > tasks; size_t max_tasks;// synchronizationstd::mutex queue_mutex;std::condition_variable condition;bool stop;};
}