CppCoreGuidelines CP.4 以任务为视角考虑问题,而不是线程
21 June 2023
“Think in terms of tasks, rather than threads”
理由
线程是技术实现上的概念,是以机器时间考虑问题。而任务则是应用术语,某些你想要做的事情,也有可能和其他任务并行执行。应用概念更容易进行分析。
例子
void some_fun(const std::string& msg) { // bad: less expressive and more error-prone std::thread publisher([=] { std::cout << msg; }); auto pubtask = std::async([=] { std::cout << msg; }); // OK // ... publisher.join(); }
注意
async()
是个例外。这个标准库函数是底层、面向机器、线程+锁层级的。它是一个必要的基础功能。但是,我们必须提升其抽象层级:为了提高工作效率、提高可靠性、提高性能。这里是关于是否使用高层抽象/面向应用的库的一个争论点。如果可能,可以基于标准库函数构建。