问题标签 [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.

0 投票
1 回答
307 浏览

c# - PLINQ 查询,需要知道执行了多少次迭代

我基本上在做的是在一系列字母组合上并行迭代,当我得到我想要的组合时,它被认为是胜利。我想从这个查询中获得所有的胜利(它做得正确),但诀窍是如何跟踪执行胜利测试的次数(基本上是返回真/假的方法,它赢了)。

我正在类中创建一个实例变量,每次执行组合测试时都会递增,但每次运行该过程时,我都会为该实例变量获得不同的数字。我意识到这是一个线程问题,但我不确定如何解决它。

当遇到此问题时,查询需要停止的获胜次数有一个最大限制。如果我没有那个约束,我显然不需要知道组合运行的次数,因为它会运行所有组合,但是正如你所见,当我达到最大值时我需要中断查询限制。

0 投票
2 回答
508 浏览

java - 多核上的 Java 并行执行

我想知道是否存在一种方法来并行化 Java 中的查询(或有框架或库),如 C# 和 Linq:

如果我不能并行化查询,如果我可以在 c# 中做这样的事情(每个并行化一个):

请如果您发布任何框架或库,您能告诉我您使用它的经验吗?谢谢你的时间。

关于 c# 和 linq 你可以在这里找到文档:http: //msdn.microsoft.com/en-us/library/dd997425.aspx

0 投票
2 回答
1488 浏览

linq - lambda 比 linq 查询快吗?

我正在玩 lambda、linq 和 parallel,一个问题来了。

lambda 比 linq 查询快吗?

O 编写一些测试代码(在 GitHub 中 Fork it)并且 lambda 方法似乎更快。这是真的还是我错过了什么?

0 投票
2 回答
4257 浏览

c# - 阅读器关闭时调用 Read 的尝试无效

我在不同的类中有几部分代码,它们使用这个或非常相似的代码从 SQL Server 数据库中提取一些数据。他们中的大多数都可以工作,但我遇到了一些问题,真的不明白为什么。上面的代码将执行 60-64 次,检索行,但随后会因无效读取错误而崩溃。我追踪了任何令人兴奋的记录,但它似乎只是在这些记录和停止之间的任何地方命中。这个类没有调用任何其他类函数,本质上,这是唯一运行的东西。

我的连接字符串的超时时间为 600 秒,并且我也设置了 mars。另一个注释;这是从 Parallel.ForEach 调用的,并行度设置为 2。

正如我所说,我在整个程序中的多个地方都使用了这种代码结构,其中大部分都运行良好,让我担心的不仅仅是错误,而是它出现的不一致。

当我摆脱 Parallel.ForEach 并将其作为 foreach 运行时,它就可以工作了。不过我需要这些线程,否则这需要很长时间。我也很好奇读者在哪里关闭。

异常:System.InvalidOperationException--阅读器关闭时调用 Read 的尝试无效。

调用代码:

建立连接的代码:

连接字符串:数据源=xxxxx;初始目录=yyyyy;Trusted_Connection=True;MultipleActiveResultSets=True;连接超时=600;

堆栈跟踪: .Data.SqlClient.SqlDataReader.ReadInternal(Boolean setTimeout) at System.Data.SqlClient.SqlDataReader.Read() at GroupDataAccess.EligibilityClassData.GetEligibilityClass(String id) in C:\Subversion\branches\Fimmas\FimmasToInfoHub\GroupHubFeed \GroupData\EligibilityClassData.cs:C:\Subversion\branches\Fimmas\FimmasToInfoHub\GroupHubFeed\GroupLogic\GroupExtract.cs:GroupLogic.GroupExtract.BuildEligibilityClass(String id, Group& group) 的第 95 行:GroupLogic.GroupExtract 的第 188 行。< >c_ DisplayClass2.b _1() 在 C:\Subversion\branches\Fimmas\FimmasToInfoHub\GroupHubFeed\GroupLogic\GroupExtract.cs: System.Threading.Tasks.Task.InnerInvoke() 在 System.Threading.Tasks.Task 的第 113 行。执行()

初始调用通过循环(当转换为正常的 foreach 时,一切都很好):

来电

哪个电话

命中其中一个读数。

0 投票
2 回答
581 浏览

c# - .net 中的 System.Threading.Task 库,特别是 Parallel.ForEach

我查看了微软关于 MSDN 上的任务的教程......它显示的内容很好,但我仍然有问题在那里的例子......在这个 URL 找到:MSDN Link

他们展示了一个示例,其中展示了 Parallel.ForEach() 静态方法调用。在那个方法调用中,它们有四个参数……第一个参数必须是一个整数数组吗?或者它可能是所有线程都在处理的任何类型的集合或对象?看起来第二个参数是一个 Action,它是一个不返回值(或 void)的委托。第二个变量到底是干什么用的?线程本地初始化程序?为什么初始化为0?这里到底设置了什么?第三个参数只是一个委托(或我想用的函数点)是 lambda 表达式的右侧实际函数吗?例如,我可以把一个实际函数的名称放在那一边,而不必在那里写出来吗?例如...

0 投票
3 回答
9710 浏览

c# - Parallel.ForEach 不断产生新线程

当我在我的程序中使用 Parallel.ForEach 时,我发现有些线程似乎永远不会完成。事实上,它一遍又一遍地产生新线程,这是我没有预料到也绝对不想要的行为。

我能够使用以下代码重现此行为,就像我的“真实”程序一样,都大量使用处理器和内存(.NET 4.0 代码):

当在我的四核上运行时,它最初以 4 个并发线程开始,正如您所期望的那样。然而,随着时间的推移,越来越多的线程被创建。最终,该程序会抛出 OutOfMemoryException:

上面实验的内存使用图如下:

处理器和内存使用情况

屏幕截图是荷兰语;上半部分表示处理器使用情况,下半部分表示内存使用情况。)如您所见,几乎每次垃圾收集器妨碍时都会产生一个新线程(可以看出在内存使用量下降的情况下)。

谁能解释为什么会发生这种情况,以及我能做些什么?我只想让 .NET 停止产生新线程,并首先完成现有线程......

0 投票
0 回答
381 浏览

c# - 尽可能快地并行处理 webrequest 项目列表

我有一批要获取的网址。该列表包含具有不同域名的 url(超过 50.000 个),但所有域都使用相同的负载平衡服务器 ip。

对于每个 url,我想记录其结果代码、获取持续时间以及内容的哈希值及其重定向标头。

当前方法每秒获取大约 10 次,响应时间大约为半秒。

我怎样才能更快地执行以下操作?

我目前有以下代码结构:

ProcessItem是基于以下几点:

我应用了以下配置:

我尝试了以下方法:

  • 通过指定新的 ParallelOptions { MaxDegreeOfParallelism = 25 } 来限制 Parallel.ForEach,因为我认为我可能正在处理很多 Web 请求,但即使降低它更多也不会提高性能。
  • 应用asyncwithTask.WaitAll(Task[])但这会导致很多错误,因为所有任务的创建速度都非常快,但几乎所有任务都会导致连接错误。

有趣的观察是:

  • 我的互联网网络连接并没有真正处于负载状态,因此没有拥塞
  • cpu、内存和 IO 也没有真正测试,但 IO 显示下降。
0 投票
1 回答
796 浏览

c# - 如何使用 TPL/TAP 实现等效?

下面我有一个使用 Azure 服务总线队列的相当简单的 .NET 控制台应用程序。

正如您将看到的,我正在使用 Task.Factory 启动 25 个接收器任务,然后调用我的 APM 样式的 BeginMessageReceive 方法。然后,在 EndMessageReceive 结束时,我再次调用 BeginMessageReceive 以保持循环继续进行。

我的问题是我如何才能实现同样的事情,但使用递归任务并可能利用 C# 5.0 async/await 从 APM 样式的 BeginMessageReceive/EndMessageReceive 切换到 TPL/TAP 方法?

如果 MessageReceive 超时过期,用于递归调用自身的新修改代码:

0 投票
2 回答
4438 浏览

c# - 在多个 IQueryable 上并行运行相同的 linq 查询?

情况:我有一个List<IQueryable<MyDataStructure>>. 我想对它们中的每一个并行运行一个 linq 查询,然后加入结果。

问题:如何创建一个可以作为参数传递的 linq 查询?

示例代码:

这是一些简化的代码。首先,我收集了IQueryable<string>

我想找到所有以字母“h”开头的单词。只需一个IQueryable<string>,这很容易:

但我想对所有IQueryable<string>对象并行运行相同的查询,然后合并结果。这是一种方法:

但我希望这是一个更通用的解决方案。这样我就可以单独定义 linq 操作并将其作为参数传递给方法。像这样的东西:

但我不知道如何做到这一点。有任何想法吗?

0 投票
0 回答
293 浏览

task-parallel-library - NativeOverlapped 或 System.Threading.Overlapped 在 PFX IOTaskScheduler 中的哪些场景有用?

我正在查看 PFX 团队的Parallel Extensions Extras DLL并看到一个使用NativeOverlapped和 System.Threading.Overlapped 方法的 IOTaskScheduler。

由于没有太多关于每个扩展何时有用的文档,因此由我来阅读源代码并确定何时应该使用给定的功能。

我什么时候使用 IOTaskScheduler 或 NativeOverlapped 功能?

(直接链接到源代码) (本页底部的文档)