问题标签 [ppl]

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 回答
383 浏览

asynchronous - 将异步函数的完成链接到另一个

我正在开发一个 Windows Store (C++) 应用程序。这是一种使用 Web 服务从数据库中读取数据的方法。

我很困惑如何将接收到的数据返回给调用函数。现在,我在我的数据类的构造函数中调用这个函数,如下所示:

每当我尝试从 GetFromDB() 接收返回的数据时,都会收到 COM 异常。但是这个运行良好:

请提出一种将 GetFromDB 的完成链接到其他代码的更好方法。以及如何从 GetFromDB() 的 try{} 块中获取返回值。请记住,我是异步编程的新手。

0 投票
8 回答
4769 浏览

c++ - 并行化 for 循环不会带来性能提升

我有一个将拜耳图像通道转换为 RGB 的算法。在我的实现中,我有一个嵌套for循环,它遍历拜耳通道,从拜耳索引计算 rgb 索引,然后从拜耳通道设置该像素的值。这里要注意的主要事情是每个像素都可以独立于其他像素进行计算(不依赖于先前的计算),因此该算法是并行化的自然候选者。然而,计算确实依赖于所有线程将同时访问但不会改变的一些预设数组。

但是,当我尝试将主要for与 MS并行化时cuncurrency::parallel_for,性能并没有得到任何提升。事实上,对于在 4 核 CPU 上运行的大小为 3264X2540 的输入,非并行版本的运行时间约为 34 毫秒,并行版本的运行时间约为 69 毫秒(平均超过 10 次运行)。我确认该操作确实是并行化的(为该任务创建了 3 个新线程)。

使用英特尔的编译器tbb::parallel_for给出了接近准确的结果。作为比较,我从实现的算法开始,C#其中我还使用了parallel_for循环,在那里我遇到了接近 X4 的性能提升(我选择了这个算法,C++因为C++即使使用单核,这个特定任务也更快)。

有什么想法阻止我的代码很好地并行化吗?

我的代码:

0 投票
2 回答
1668 浏览

c++ - 英特尔 TBB 中的任务延续

有没有类似 PPL 在 TBB 中的任务延续?tbb::task我知道手动分配s 和手动分配延续任务并为它们手动管理引用计数的低级 TBB 方法:

这简直太可怕了。您必须提前知道将产生多少子任务,并适当地手动设置引用计数。这是非常脆弱的编码...

PPL 指定延续的方式非常简单:

您如何在 TBB 中实现这一目标?

0 投票
1 回答
600 浏览

c++ - ConcRT 的定期任务

我正在编写一个 C++ 应用程序,除其他职责外,它会定期(每小时一次)向服务器发出请求。
此计划任务可以被中断并强制执行更早(当应用程序接收到新的用户数据时)。为此,我决定使用 ConcRT。

  • 有没有这种调度的标准方式(如 Win32 中的定时器队列)但有任务和任务组?
  • 还是我应该将任务与延续联系起来?
  • 也许代理库更适合这个?(我认为这对我的问题来说太过分了)

PS HTTP 请求是使用老式 WinHTTP 发出的(可执行文件不能依赖第三方库并保持较小的大小)。那么有没有符合 ConcRT 机制的 HTTP 请求功能的异步实现呢?

0 投票
1 回答
339 浏览

asynchronous - 如何捕获异步方法内部发生的异常?(Windows 应用商店应用程序,PPL)

我试图从 OnlineIdAuthenticator::AuthenticateUserAsync 方法中捕获异常,例如,当没有互联网连接时会发生这种情况。

我找到了一些关于这个主题的信息,但它并没有真正帮助我。

这是演示我尝试处理错误的方式的代码:

但是当 AuthenticateUserAsync 方法失败时,这些捕获中的任何一个都不起作用。任何帮助,请。从异步方法中捕获异常的正确方法是什么?

0 投票
2 回答
789 浏览

c++ - VC10 PPL 或准备 STL 线程

我正在使用 MSVC 2010 开始一个新的 MFC 项目,现在尝试决定将哪个库用于并发任务。我知道新的 C++0x 线程特性,但它没有在 VC10 中实现。VC12 还不是一个选项,但它会在未来出现。我确实有 Microsoft PPL,它对我来说看起来不错,但我们可能会从 Windows 迁移到 Linux 以迎接新的项目,所以对于重用代码,也许保留 STL 更便携?为此,我可以选择使用 boost 来使用 VC12 更改为 std。

我的问题是我应该更喜欢什么,PPL 或暂时提升然后 std?我想听听您对两者的体验,哪个更强大,更方便,优点和缺点。

0 投票
2 回答
2942 浏览

c++ - 返回 PPL 任务的 C++ 函数签名?

在 C++ 环境中使用 PPL 任务时,我完全是个菜鸟,所以我很难弄清楚以下 C# 代码的 C++ 语法是什么:

此 C# 代码取自Windows Store reversi Microsoft 示例代码。到目前为止,我能得到的最好的结果是:

但它会产生以下编译错误:

我理解为什么会发生此错误,但我不知道如何拥有一个返回任务而在两个不同位置没有返回值的函数?我什至还没有处理 GetImageStream 。

我什至不确定我在这方面采取了正确的道路......

谢谢!

0 投票
1 回答
552 浏览

c++ - PPL 容器性能

我正在编写一个服务器应用程序,它一次从多个来源获取数据并将其存储在它的内部数据库中(目前是一个std::set)。

我刚刚查看了 Microsoft 的 ConcRT PPL 数据结构,想知道它们的效率与在std::unordered_set. 例如,两个代码片段之间是否存在很大的性能差异:

和:

此外,我经常需要按顺序打印数据,这就是我目前使用的原因std::set,而不是std::unordered_set,所以如果使用 有增益,concurrency::concurrent_unordered_set潜在的性能增益是否会接近每次重新排序数据的成本需要打印吗?

0 投票
1 回答
1902 浏览

c++ - PPL:线程池的初始化

是否有任何标准方法来预初始化 PPL 线程池?问题是:PPL 在运行时创建它的线程池,例如 parallel_for() 正在执行。由于创建了额外的线程,这在第一次运行期间会降低一些性能。

为了澄清问题,这里有一个例子:

0 投票
0 回答
203 浏览

c++ - 当`when_all`的多个子任务抛出未捕获的异常时,可以防止进程终止吗?

并发运行时检测任务抛出的异常何时无法处理并“快速失败”;也就是说,它终止了进程。我有一个案例,给 a 的多个子任务when_all可能会引发异常。理想情况下,我希望这些异常取消任务树,然后聚合到一个在顶级获取或等待中引发的异常中。相反,我的进程会从我下面终止。这是一个演示问题的玩具示例:

在此示例中,进程在“进程仍在运行”打印到控制台之前终止。似乎子任务中的异常导致wait_all立即调用其继续,而不等待其他子任务完成/取消,然后无法处理其他子任务引发的异常并导致进程终止。这似乎是非常不可取的。有解决方法吗?这是一个错误吗?我错过了什么吗?