Skip to Content
C++语言导学(原书第2版)
book

C++语言导学(原书第2版)

by 本贾尼 斯特劳斯特鲁普
August 2021
Intermediate to advanced
450 pages
5h 35m
Chinese
Pearson
Content preview from C++语言导学(原书第2版)

15.7.3 async()

我在本章中所遵循的思路是:将任务当作可以与其他任务并发执行的函数来处理,这也是各种各样的思路中我认为最简单的,但同时又不失其强大性。它并非C++标准库所支持的唯一模型,但它能很好地满足广泛的需求。一些更为微妙和复杂的模型,如依赖于共享内存的程序设计风格,可以根据需要使用。

如需启动可异步运行的任务,我们可以使用async():

基本上,async()将一个函数调用的“调用部分”和“获取结果部分”分离开来,并将这两部分与任务的实际执行分离开来。使用async(),你不必再操心线程和锁,只需考虑可异步计算结果的任务。但这显然有一个限制:不要试图对共享资源且需要用锁机制的任务使用async()——若使用async(),你甚至不知道要使用多少个thread,因为这是由async()来决定的——它根据调用发生时它所了解的系统可用资源量来确定使用多少个thread。

猜测计算任务和thread启动的相对开销是一种很原始的方法,而且容易得到关于性能的错误结论(例如使用v.size()<10000)。但我们不可能在本节详细讨论如何管理thread。因此,记住v.size()<10000只不过是一个简单而且可能很糟糕的实现,不要在实际代码中使用它。很少有必要手工并行化标准库算法,如accumulate(),因为reduce(par_unseq,/*...*/)这样的并行算法做得更好(参见14.3.1节)。但是,本节介绍的技术是通用的。

请注意,async()并非一个专门为并行计算提高性能所设计的机制。例如,我们还可以用它来创建一个任务以从用户获取信息,而让“主程序”继续进行其他计算(参见15.7.3节)。 ...

Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.

Read now

Unlock full access

More than 5,000 organizations count on O’Reilly

AirBnbBlueOriginElectronic ArtsHomeDepotNasdaqRakutenTata Consultancy Services

QuotationMarkO’Reilly covers everything we've got, with content to help us build a world-class technology community, upgrade the capabilities and competencies of our teams, and improve overall team performance as well as their engagement.
Julian F.
Head of Cybersecurity
QuotationMarkI wanted to learn C and C++, but it didn't click for me until I picked up an O'Reilly book. When I went on the O’Reilly platform, I was astonished to find all the books there, plus live events and sandboxes so you could play around with the technology.
Addison B.
Field Engineer
QuotationMarkI’ve been on the O’Reilly platform for more than eight years. I use a couple of learning platforms, but I'm on O'Reilly more than anybody else. When you're there, you start learning. I'm never disappointed.
Amir M.
Data Platform Tech Lead
QuotationMarkI'm always learning. So when I got on to O'Reilly, I was like a kid in a candy store. There are playlists. There are answers. There's on-demand training. It's worth its weight in gold, in terms of what it allows me to do.
Mark W.
Embedded Software Engineer

You might also like

软件开发实践:项目驱动式的Java开发指南

软件开发实践:项目驱动式的Java开发指南

Raoul-Gabriel Urma, Richard Warburton
管理Kubernetes

管理Kubernetes

Brendan Burns, Craig Tracey
Python机器学习案例精解

Python机器学习案例精解

Posts & Telecom Press, Yuxi (Hayden) Liu

Publisher Resources

ISBN: 9787111633280