问题标签 [stdasync]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
451 浏览

c++11 - 无法在 GCC 5.3.0 上运行使用 std::async 的代码

我在练习std::async++11中引入的函数,我写了一个简单的例子

是的,开始很简单,我正在使用 GCC 5.3.0 编译它

g++ -std=c++11 practise.cpp -lpthread

和错误

我错过了什么吗?我链接 lpthread 的方式可以吗?我在 Windows 7 上。

0 投票
2 回答
1569 浏览

c++ - 使用异步 C++ 进行向量的并行乘法

我正在尝试并行化一段代码,该代码将两个复数浮点向量相乘并对结果求和。为此,我尝试将 std::async 与期货一起使用。我的想法是将向量分成 8 个部分,并在这 8 个部分中的每一个上并行执行乘法运算,然后将它们相加以获得我的最终结果。为此,我创建了 8 个期货,每个期货都包含一个 lambda,它将两个向量相乘并将结果相加。每个未来都被传递指向向量的不同位置的指针,这些位置代表这个特定未来应该作用的向量部分。

但是,它似乎并没有给我预期的速度提升,它可能将这部分代码的速度提高了 20-30%,但就是这样,此外,负载似乎并没有分散到我的内核(4或 8 个超线程),但似乎都在一个 100% 的核心上。

我已经包含了下面的代码。任何建议将不胜感激。

0 投票
2 回答
3541 浏览

c++ - 为什么 std::async 比简单的分离线程慢?

有人告诉过我好几次,我应该使用参数std::async来触发并忘记类型的任务std::launch::async(所以它最好在新的执行线程上发挥作用)。

在这些陈述的鼓舞下,我想看看std::async与以下内容相比如何:

  • 顺序执行
  • 一个简单的分离std::thread
  • 我简单的异步“实现”

我天真的异步实现如下所示:

这里没有什么花哨的,将仿函数与其参数一起打包f成一个,在一个分离的新对象上启动它,然后从任务中返回。std::packaged taskstd::threadstd::future

现在测量执行时间的代码std::chrono::high_resolution_clock

哪里someTask()有一个简单的方法,在这里稍等一下,模拟完成的一些工作:

最后,我的结果:

  • 顺序:1263615
  • 线程:47111
  • 标准::同步:821441
  • 我的异步:30784

谁能解释这些结果?它似乎std::aysnc我的幼稚实现慢得多,或者只是简单而简单的detached std::thread s。为什么会这样?在这些结果之后还有什么理由使用std::async

(请注意,我也用 clang++ 和 g++ 做了这个基准测试,结果非常相似)

更新:

阅读 Dave S 的回答后,我将我的小基准更新如下:

所以std::futures 现在没有被破坏 - 并因此加入 - 每次运行。在代码中进行此更改后,std::async会产生与我的 implementation & detached 类似的结果std::thread

0 投票
1 回答
627 浏览

multithreading - C++17 异步:运行 this' 方法会阻塞整个对象

我正在开发一个游戏。假设有一个带有这些方法(以及其他一些方法)的对象LoadingState :

  • 创造
  • 更新
  • 加载

每次 CPU 时钟滴答时都会调用更新,而创建只会调用一次,它应该调用加载函数(异步),以加载一些游戏资产。在 create 函数中异步调用 load 允许(理论上)在 create/load 执行时从调用的 beling 更新。然而,这并没有发生。

在 Visual Studio 2015 之前,我像这样使用 std::async :

在迁移到 Visual Studio 2015 (C++17) 并阅读必须指定 std::launch 之后,否则可能会发生意外行为,现在异步调用如下:

换句话说,在我看来,'this' 被 std::async 锁定,阻塞了整个对象,阻止了主线程调用更新。

更多相关代码:

我在这里误会什么?!

PS:在迁移之前,一切都可以顺利运行。

0 投票
1 回答
533 浏览

multithreading - 在构造函数中使用 std::async

我对 C++11 功能std::async很陌生,我无法理解为什么下面的代码从不打印bar

有人可以为我解释一下吗?

0 投票
1 回答
111 浏览

multithreading - std::async 运行了多长时间?

如果我在一个类中创建一个 std::async 对象,对应的线程会运行多长时间?直到调用包含类(Bar)的析构函数?


编辑:

以下示例中的线程运行多长时间:

0 投票
0 回答
355 浏览

ios - std::async 与 std::future_status::timeout,仅在 iOS 上每隔一段时间就会超时

我正在我的应用程序std::asyncC++一部分中使用一个来做一个heavy transaction,如果网络出现问题,这可能需要很长时间。因此,我使用了std::async结合std::future等待超时设置,这样可以避免在事务需要很长时间时挂断电话。每次用户单击某个按钮时都会调用它UI

我的这段C++代码在 4 个不同的平台上使用,即iOS, Android, OSX & Windows. 以下是我std::async用来执行此繁重操作的方式。

上述std::async & std::future_status技术适用于所有平台。仅在 上iOS,我遇到一个问题,即future用户每次单击按钮时都会超时。

在我使用的方式上有什么我应该纠正的std::async & std::future_status吗?可能有什么问题?我已经尝试过很多次搜索。std::async除了尚未为所有平台准备好的信息外,我没有得到任何其他信息。我遇到了一个问题std::asynciOS

我是这种async+futures基于C++编程的新手。做,让我知道我是否在这里犯了明显的错误

0 投票
1 回答
182 浏览

c++ - 是什么导致 std::async 中的数据竞争?

我最近在 Conway 的 Game of Life 中创建了一个模式搜索程序,但运行速度太慢,不实用。
所以我决定并行化它,但我失败了;它导致了分段错误,这很可能是由于数据竞争。
代码的简要说明:

我很确定results这是在 lambda 表达式的函数范围之外声明并在那里修改的唯一对象,所以我用互斥锁锁定了它。
但数据竞赛仍然存在。那么是什么原因造成的呢?

0 投票
1 回答
1780 浏览

c++ - C++ std::async 不会产生新线程

C++11

我预计输出应该是交错的async threadmain thread因为应该有 2 个不同的线程。

但事实并非如此。

它输出:

我想只有一个线程。有人能告诉我为什么它没有为它生成一个新线程std::async吗?谢谢。

0 投票
4 回答
7669 浏览

c++ - 从 std::async 返回的 std::future 在超出范围时挂起

我正在使用std::asyncstd::futurefrom的组合C++ 11。我正在对我在代码中执行的某个活动强制执行超时,这在我尝试连接到服务器时可能需要一些时间。

以下是代码的样子:

在大多数情况下,事情都很好。未来超时并在许多情况下报告已准备就绪。但是,我观察到的奇怪行为是,在某些情况下,UI 会挂起,因为my_future_result超出范围时会挂起。我通过重复调用来确认这一点,my_future_result.get()如果在退出方法之前调用它就不会返回。

我怎样才能解决这个问题?有什么方法可以取消或删除或终止std::future?