August 2021
Intermediate to advanced
450 pages
6h 57m
Chinese
到目前为止,本章一直关注运行并发任务的机制:关注点是thread、避免数据竞争和thread同步。对很多并发应用,我发现这种对机制的关注会分散我们对实际任务(原目标,指明了并发任务!)的注意力。本节介绍如何指定一种简单的任务:一种根据给定参数完成一项工作、生成一个结果的任务。
为了支持这种基于任务的并发模型,标准库提供了如下特性:
这些特性的描述暴露了很多细节,而这些细节没有必要烦扰应用程序编写者。请牢记任务模型的根本原则:简单性。大多数更复杂的细节支持的都是很少见的用途,例如隐藏更为麻烦的线程和锁机制。
标准库对任务的支持仅仅是如何支持基于任务的并发的一个例子而已。我们常常希望提供大量小任务,让“系统”操心如何将它们映射到硬件资源去执行以及如何避免它们发生数据竞争、伪唤醒、过度等待,等等。
这些特性的重要性在于它们对程序员而言非常简单。在一个串行程序中,我们通常会编写下面这样的代码:
并行版本变为:
有时,我们在考虑替代方案、细节、性能和权衡时会忽视简单性的价值。我们应优先考虑使用最简单的技术,将更复杂的解决方案留到我们确信真正值得使用的地方。 ...