问题标签 [parallel-extensions]
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.
parallel-processing - 这是 PLINQ 错误吗?
为什么 PLINQ 输出不同于顺序处理和 Parallel.For 循环
我想添加 10,000,000 个数字的平方根之和。这是 3 种情况的代码:
顺序for循环:
输出为:21081852648.717
现在使用 Parallel.For 循环:
输出为:21081852648.7199
现在使用 PLINQ
输出为:21081852648.72
为什么 PLINQ 输出与 Parallel.For 和 Sequential for 循环之间存在差异?
list - F# 列表中的 Task.WaitAll
我正在使用 F# 进行并行编程。对于固定数量的元素,例如 2 个元素 a1、a2 和一个函数 f,我可以执行以下操作:
我想知道如何对元素列表做同样的事情:
Visual Studio 发现 Task.WaitAll 不能接受 Task< T > 列表作为其参数。Task.WaitAll 可以将 Task [] 作为其参数,但这没有任何意义,因为我需要获取 Result 进行下一次计算。
c# - 使用多个有限数量的线程处理项目列表
基本上,我想处理多个线程中的项目列表,而不是一次处理一个。我只想要一次有限数量的线程。这种方法有意义吗?使用线程计数的全局变量是唯一的选择吗?(下面的伪代码)
c# - 我应该使用线程池还是任务并行库进行 IO 绑定操作
在我的一个有点像聚合器的项目中,我从网络上解析提要、播客等。
如果我使用顺序方法,考虑到大量资源,处理所有资源需要相当长的时间(因为网络问题和类似的东西);
所以我想实现并发,但无法决定我应该基本上使用 ThreadPools 来处理工作线程还是仅仅依靠 TPL 来对其进行排序。
ThreadPools 肯定会用工作线程为我处理这项工作,我会得到我所期望的(在多核 CPU 环境中,也将使用其他内核)。
但我仍然想考虑 TPL 作为推荐方法,但我有点担心。首先,我知道 TPL 使用 ThreadPools 但增加了额外的决策层。我最关心的是存在单核环境的情况。如果我没记错的话,TPL 从一开始的工作线程数等于可用 CPU 核心数开始。我确实担心 TPL 会为我的 IO 绑定案例产生与顺序方法相似的结果。
所以对于 IO-bound 操作(在我的情况下从 web 读取资源),最好使用 ThreadPools 并控制事物,还是更好地依赖 TPL?TPL 也可以用在 IO-bound 场景中吗?
更新:我主要担心的是——在单核 CPU环境中,TPL 的行为会像顺序方法一样,还是仍会提供并发性?我已经在阅读Parallel Programming with Microsoft .NET等书,但找不到确切的答案。
注意:这是对我之前的问题 [ Is it possible to use thread-concurrency and parallelism together? ] 措辞非常错误。
c# - 并行扩展
我有一个具有大量 IO 操作的应用程序,例如文件复制、压缩和在文件系统中移动文件,复制到备份服务器。
我将此程序构建为单线程。它在 2 分钟内运行。
我用 Parallel 扩展和使用 Task 构建了这个程序的另一个版本,它也几乎在 2 分钟内运行。
换句话说,由于大量的 IO,我没有看到使用 Parallels 的性能提升。
如果我将应用程序部署到刀片服务器,我会得到相同的结果吗?
刀片服务器是否比我的工作站更快/在多通道上处理 IO?
将 Parallels 与 IO 绑定应用程序一起使用没有好处吗?
linq - LINQ 运算符是否完全阻塞?
我正在查看 VS2010 Concurrency Profiler 的输出,我注意到我在一些 LINQ 运算符周围遇到了一些线程争用。以下是引起争用的声明:
LINQ 运算符是否阻塞?在作为 Parallel.ForEach 的一部分运行的任务中使用它们时我应该更加小心吗?
c++ - __gnu_parallel::accumulate 出现意外的段错误
这真的让我很困惑,如果有人能帮助我,我将不胜感激。
(编辑:认为这是一个模板问题,我错了)
我想用 gnu 的并行累积算法(存储在#include <parallel/numeric>
)添加以下类的多个副本
类故意不做太多,我不觉得这是线程冲突的问题吗?
然后我运行它
这真的让我很困惑——我不知道问题是什么。我正在使用 g++ 4.4.5 并使用g++ gnu_parallel.cpp -g -fopenmp
编辑:
请注意,这有效:(999 个元素而不是 1000 个)
回溯是:
c# - OCR 应用程序中的 C# 并行任务用法?
我正在构建一个 Windows 服务应用程序,该应用程序将包含扫描图像的目录作为输入。我的应用程序将遍历所有图像,并且对于每个图像,它将执行一些 OCR 操作以获取条形码、发票编号和客户编号。
一些背景资料:
- 应用程序执行的任务是相当 CPU 密集型的
- 有大量图像要处理,扫描的图像文件很大(~2MB)
- 该应用程序在具有 16GB RAM 的 8 核服务器上运行。
我的问题:
由于它正在处理文件系统上的图像,因此我不确定如果我以一种将使用 .NET 并行任务的方式更改我的应用程序是否真的会有所作为。
有人可以给我建议吗?
非常感谢!
c# - 如何使用 c# 和并行扩展并行化顺序任务?
我有以下按顺序调用的方法:
- 私有 StringBuilder ReadPDF();
- 私有 StringBuilder CleanText(StringBuilder sb);
- 私人无效 ParseText();
ParseText 调用 ReadPDF 调用 CleanText;
我正在解析的 PDF 有 15MB 的文本,使用普通的 core 2 duo 计算机从文件中提取所有数据需要 10 分钟。
如何并行化这些任务?
编辑:澄清一下,阅读 PDF 需要很少的时间,问题在于解析提取的文本,更具体地说是在 CleanText 阶段。我需要并行化的原因是清理单个页面是即时的,但是清理 2k+ 个页面需要很长时间。
c# - 数据的线程安全缓冲区,以控制大小的批量插入
我有一个模拟生成必须保存到数据库的数据。
模拟生成了一大堆数据,所以先生成然后保存到数据库(最多1 GB数据)是不切实际的,并且将它一个一个保存到数据库也没有意义(交易太小,不实用)。我想将它们作为受控大小的批量插入(比如一次提交 100)插入到数据库中。
但是,我认为我对并行计算的了解并不那么理论。我想出了这个(你可以看到这是非常有缺陷的):
如您所见,我使用队列来创建缓冲区,然后手动决定何时提交。但是,我有一种强烈的感觉,这对我的问题来说并不是很有效的解决方案。首先,我不确定我是否正确锁定。其次,我不确定这是否是完全线程安全的(或根本不安全)。
您能否看一下并评论我应该做些什么不同的事情?或者,如果有更好的方法来做到这一点(使用某种生产者-消费者技术或其他东西)?
谢谢和最良好的祝愿, D.