问题标签 [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.
c++11 - 无法在 GCC 5.3.0 上运行使用 std::async 的代码
我在练习std::asyn
c++11中引入的函数,我写了一个简单的例子
是的,开始很简单,我正在使用 GCC 5.3.0 编译它
g++ -std=c++11 practise.cpp -lpthread
和错误
我错过了什么吗?我链接 lpthread 的方式可以吗?我在 Windows 7 上。
c++ - 使用异步 C++ 进行向量的并行乘法
我正在尝试并行化一段代码,该代码将两个复数浮点向量相乘并对结果求和。为此,我尝试将 std::async 与期货一起使用。我的想法是将向量分成 8 个部分,并在这 8 个部分中的每一个上并行执行乘法运算,然后将它们相加以获得我的最终结果。为此,我创建了 8 个期货,每个期货都包含一个 lambda,它将两个向量相乘并将结果相加。每个未来都被传递指向向量的不同位置的指针,这些位置代表这个特定未来应该作用的向量部分。
但是,它似乎并没有给我预期的速度提升,它可能将这部分代码的速度提高了 20-30%,但就是这样,此外,负载似乎并没有分散到我的内核(4或 8 个超线程),但似乎都在一个 100% 的核心上。
我已经包含了下面的代码。任何建议将不胜感激。
c++ - 为什么 std::async 比简单的分离线程慢?
有人告诉过我好几次,我应该使用参数std::async
来触发并忘记类型的任务std::launch::async
(所以它最好在新的执行线程上发挥作用)。
在这些陈述的鼓舞下,我想看看std::async
与以下内容相比如何:
- 顺序执行
- 一个简单的分离
std::thread
- 我简单的异步“实现”
我天真的异步实现如下所示:
这里没有什么花哨的,将仿函数与其参数一起打包f
成一个,在一个分离的新对象上启动它,然后从任务中返回。std::packaged task
std::thread
std::future
现在测量执行时间的代码std::chrono::high_resolution_clock
:
哪里someTask()
有一个简单的方法,在这里稍等一下,模拟完成的一些工作:
最后,我的结果:
- 顺序:1263615
- 线程:47111
- 标准::同步:821441
- 我的异步:30784
谁能解释这些结果?它似乎std::aysnc
比我的幼稚实现慢得多,或者只是简单而简单的detached std::thread
s。为什么会这样?在这些结果之后还有什么理由使用std::async
?
(请注意,我也用 clang++ 和 g++ 做了这个基准测试,结果非常相似)
更新:
阅读 Dave S 的回答后,我将我的小基准更新如下:
所以std::future
s 现在没有被破坏 - 并因此加入 - 每次运行。在代码中进行此更改后,std::async
会产生与我的 implementation & detached 类似的结果std::thread
。
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:在迁移之前,一切都可以顺利运行。
multithreading - 在构造函数中使用 std::async
我对 C++11 功能std::async
很陌生,我无法理解为什么下面的代码从不打印bar
。
有人可以为我解释一下吗?
multithreading - std::async 运行了多长时间?
如果我在一个类中创建一个 std::async 对象,对应的线程会运行多长时间?直到调用包含类(Bar)的析构函数?
编辑:
以下示例中的线程运行多长时间:
ios - std::async 与 std::future_status::timeout,仅在 iOS 上每隔一段时间就会超时
我正在我的应用程序std::async
的C++
一部分中使用一个来做一个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::async
吗iOS
?
我是这种async+futures
基于C++
编程的新手。做,让我知道我是否在这里犯了明显的错误
c++ - 是什么导致 std::async 中的数据竞争?
我最近在 Conway 的 Game of Life 中创建了一个模式搜索程序,但运行速度太慢,不实用。
所以我决定并行化它,但我失败了;它导致了分段错误,这很可能是由于数据竞争。
代码的简要说明:
我很确定results
这是在 lambda 表达式的函数范围之外声明并在那里修改的唯一对象,所以我用互斥锁锁定了它。
但数据竞赛仍然存在。那么是什么原因造成的呢?
c++ - C++ std::async 不会产生新线程
C++11
我预计输出应该是交错的async thread
, main thread
因为应该有 2 个不同的线程。
但事实并非如此。
它输出:
我想只有一个线程。有人能告诉我为什么它没有为它生成一个新线程std::async
吗?谢谢。
c++ - 从 std::async 返回的 std::future 在超出范围时挂起
我正在使用std::async
和std::future
from的组合C++ 11
。我正在对我在代码中执行的某个活动强制执行超时,这在我尝试连接到服务器时可能需要一些时间。
以下是代码的样子:
在大多数情况下,事情都很好。未来超时并在许多情况下报告已准备就绪。但是,我观察到的奇怪行为是,在某些情况下,UI 会挂起,因为my_future_result
超出范围时会挂起。我通过重复调用来确认这一点,my_future_result.get()
如果在退出方法之前调用它就不会返回。
我怎样才能解决这个问题?有什么方法可以取消或删除或终止std::future
?