CppCoreGuidelines CP.41 减少线程的创建和销毁
04 July 2023
“Minimize thread creation and destruction”
理由
线程创建成本高。
例子
void worker(Message m) { // process } void dispatcher(istream& is) { for (Message m; is >> m; ) run_list.push_back(new thread(worker, m)); }
这段代码给每一个消息生成一个线程。任务完成后, run_list
会销毁线程。
其实我们可以用让一组创建好的工作线程来处理消息。
Sync_queue<Message> work; void dispatcher(istream& is) { for (Message m; is >> m; ) work.put(m); } void worker() { for (Message m; m = work.get(); ) { // process } } void workers() // set up worker threads (specifically 4 worker threads) { joining_thread w1 {worker}; joining_thread w2 {worker}; joining_thread w3 {worker}; joining_thread w4 {worker}; }
注意
如果你的系统有很好的线程池,尽量用起来。如果你的系统有很好的消息队列,尽量用起来。