知识卡片

线程超额增加调度成本

普通读书笔记卡 · 1440

内容

可运行软件线程多于硬件线程时会产生资源超额:调度器切换时间片,带来管理开销与缓存失效。线程越多不保证吞吐越高,合适比例还取决于阻塞、计算负载和硬件,不能把某机器调优结果当通用常数。

参考来源

- 位置:《Effective Modern C++》第7章《并发API》,条款三十五:优先考虑基于任务的编程而非基于线程的编程(源文件:_epub-src/EPUB/text/ch008.xhtml) - 结论依据:原文定义oversubscription并追踪上下文切换和缓存污染,说明线程数与收益不线性对应。 - 原始内容:即使没有超出软件线程的限额,仍然可能会遇到 资源超额 ( oversubscription )的麻烦。这是一种当前准备运行的(即未阻塞的)软件线程大于硬件线程的数量的情况。情况发生时,线程调度器(操作系统的典型部分)会将软件线程时间切片,分配到硬件上。当一个软件线程的时间片执行结束,会让给另一个软件线程,此时发生上下文切换。软件线程的上下文切换会增加系统的软件线程管理开销,当软件线程安排到与上次时间片运行时不同的硬件线程上,这个开销会更…