知识卡片

任务高于线程

普通读书笔记卡 · 1396

内容

基于任务的 async/future 使调用者获取结果与异常,默认策略可把部分调度选择交给实现。但需要原生线程句柄、已知平台专项调优或自建调度技术时,直接管理线程仍有价值。必须并发执行的任务另见[[显式async策略]]。

参考来源

- 位置:《Effective Modern C++》第7章《并发API》,条款三十五:优先考虑基于任务的编程而非基于线程的编程(源文件:_epub-src/EPUB/text/ch008.xhtml) - 结论依据:原文比较结果、异常与调度职责,并给出原生线程控制等例外,因此避免把建议写成绝对规则。 - 原始内容:你需要访问非常基础的线程API 。C++并发API通常是通过操作系统提供的系统级API(pthreads或者Windows threads)来实现的,系统级API通常会提供更加灵活的操作方式(举个例子,C++没有线程优先级和亲和性的概念)。为了提供对底层系统级线程API的访问, std::thread 对象提供了 native_handle 的成员函数,而 std::future (即 std::async 返回的东西)没有这种能力。 …