首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >std::async与automatic ( launch ::async|launch::deferred)启动策略的语义是什么?

std::async与automatic ( launch ::async|launch::deferred)启动策略的语义是什么?
EN

Stack Overflow用户
提问于 2020-07-30 08:03:28
回答 1查看 71关注 0票数 0

std::async有两个重载,其中一个使参数std::launch policy显式,而另一个省略此参数。该策略是位掩码,因此可以同时指定两个launch::async|launch::deferred (或者您可以使用忽略此参数的函数来避免该策略)。在这种情况下,策略是自动选择的,并且不能保证选择。我想知道使用这个“未知”政策的原因是什么。

首先,您不应该将此策略与wait函数一起使用:您可能会得到future_status::deferred响应,发现调用此函数是无用的。接下来,如果您只计划在某个时刻get该值,则可以使用默认策略,但我认为没有理由将此选择保留在系统/库实现上,因为即使是std::launch::async也可能优化用于执行的线程数量。无论如何,实际显式选择的策略会对使用模式产生很大影响,而且在设计时使用隐藏此信息的函数非常奇怪。

当有人倾向于将策略选择留给系统时,什么可能是实际的用例?

EN

回答 1

Stack Overflow用户

发布于 2020-07-30 10:16:33

当您想要使用最适合系统的选项时,请使用默认值。

您不应该假设future在另一个线程上执行。只有在代码足够独立的情况下才使用它,这样它什么时候执行都无关紧要。也许这是我个人的偏好,但我认为,如果不这样做,就会产生令人讨厌的代码。如果你真的需要一个线程,那就使用一个线程。

在一个只有一个核心的小CPU上,最好的策略可能是在启动async|deferred任务时立即在同一线程中运行它。如果您要运行四个任务,效果将是一个接一个地运行它们。但在高端CPU上,它可以同时运行所有四个CPU,从而节省时间。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/63164245

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档