问题标签 [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 投票
4 回答
22137 浏览

.net - 我可以从该字典的枚举循环中从 ConcurrentDictionary 中删除项目吗?

例如:

显然,使用普通 Dictionary<K,V> 会引发异常,因为删除项目会在枚举的生命周期内改变字典的内部状态。我的理解是 ConcurrentDictionary 并非如此,因为提供的 IEnumerable 处理内部状态更改。我理解对了吗?有没有更好的模式可以使用?

0 投票
1 回答
258 浏览

.net-3.5 - 并行扩展工作缓慢的原因

我试图通过使用并行扩展使我的计算应用程序更快。我是新手,所以我刚刚用 Parallel.ForEach 替换了主 foreach 循环。但是计算变得更慢了。降低并行扩展性能的常见原因有哪些?

谢谢

0 投票
1 回答
441 浏览

.net - Parallel.Invoke 对象列表的相同方法

我有一个带有方法 MyMethod 的类 MyClass。对于 MyClass 实例列表中的每个 MyClass 实例,我想调用 MyMethod 并让它们在单独的线程中运行。我正在使用 .NET 4.0 和并行扩展。

0 投票
2 回答
1199 浏览

.net - 使用具有 ThreadStatic 属性的并行扩展。它会泄漏内存吗?

我正在大量使用并行扩展,并且我刚刚遇到了一种情况,即使用线程本地存储可能是明智的,以允许工作线程重用对象。因此,我正在查看 ThreadStatic 属性,该属性将静态字段/变量标记为每个线程具有唯一值。

在我看来,在不保证 PE 重用线程的情况下使用带有 ThreadStatic 属性的 PE 是不明智的。也就是说,如果线程在某种程度上被创建和销毁,变量(以及它们指向的对象)是否会在线程本地存储中保留一段不确定的时间,从而导致内存泄漏?或者也许线程存储与线程绑定并在线程被处理时被处理?但是,您仍然可能在池中拥有长期存在的线程,并且从线程用于的各种代码中积累线程本地存储。

有没有更好的方法来使用 PE 获取线程本地存储?

谢谢你。

0 投票
2 回答
5360 浏览

c# - 如何使用多维数组调用 Parallel.ForEach

我在弄清楚如何Parallel.ForEach使用二维字符串数组调用 时遇到了一些麻烦:

如果我没有明确指定类型,我会收到以下错误:

无法从用法中推断方法“System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable, System.Action)”的类型参数。尝试明确指定类型参数。

明确指定类型参数的正确方法是什么?

0 投票
1 回答
1916 浏览

c# - 使用 Parallel.ForEach 在最小值中选择最小值

一般来说,我是 C# Parallel.ForEach、. 和 .NET 的新手。我想并行化涉及数千个位置的搜索。对于每个位置,我计算大圆距离。这是我想推广到不同核心的计算。我的问题是,如果我只有一个线程局部变量,如在这个MSDN TPL 示例中,我该怎么做?对于结果,我查看了Interlocked,并看到了它的选项AddCompareExchangeDecrement、和Exchange,但我不只是添加、递增、递减或测试相等性。我想通过多个并行运行的线程返回总体最短的对象IncrementRead距离。我的直觉说这应该很容易,我应该能够创建一些包裹 aLocation和距离的小对象,但是我如何从每个线程中捕获最佳答案,然后选择其中最短的距离?这是非并行版本:

我确实看到了似乎提供了很好建议的DDJ 博客文章,但我想知道这是否是最好的建议。我看到作者在数组上循环,想知道是否没有更实用的方法来做到这一点。在函数世界中,我会使用map,lambdamin.

0 投票
6 回答
1398 浏览

unit-testing - 单元测试并发软件 - 你做什么?

随着软件变得越来越并发,您如何使用单元测试来测试类型的核心行为(不是并行行为,只是核心行为)?

在过去的美好时光里,你有一个类型,你调用它,然后检查它返回的内容和/或它调用的其他东西。

现在,您调用一个方法,实际工作被安排在下一个可用线程上运行;你不知道它什么时候真正开始并调用其他的东西——更重要的是,那些其他的东西也可能是并发的。

你如何处理这个问题?您是否抽象/注入并发调度程序(例如抽象任务并行库并在单元测试中提供假/模拟)?

你遇到过哪些对你有帮助的资源?


编辑

我编辑了问题以强调测试类型的正常行为(忽略任何用于利用多核的并行机制,例如 TPL)


0 投票
1 回答
1596 浏览

c# - (Fluent) Nhibernate 延迟加载并影响 Parallel.ForEach

FetchMode.Eager我有几个通过 FNH 配置的实体,以便在我请求实例(从数据库)时使用语法急切加载子实体。现在我的印象是,这会忽略映射中的任何延迟加载,并用“真​​实”数据填充子实体。

我想这样做的原因是因为我想使用 aParallel.ForEach来迭代实体集合并生成一组结果,但是我收到以下错误:

如果我使用“NHibernateUtil.Initialize”来初始化所有子实体,那么它会按预期工作。

我对使用的理解有误FetchMode.Eager吗?

0 投票
1 回答
1323 浏览

.net - c# 4.0 Parallel.For 需要任何特殊参考吗?

我正在关注这篇文章:http: //blogs.msdn.com/b/csharpfaq/archive/2010/06/01/parallel-programming-in-net-framework-4-getting-started.aspx

并且在我的控制台应用程序中,Parallel 命名空间可见,但“Parallel.For”编译失败,“命名空间类型 For 不存在于命名空间‘Parallel’中”。

我已经搜索了网络,但在 System.Threading 中没有看到任何其他内容,这是我添加的命名空间(尽管它不是程序集引用,我在 .Net 框架引用列表中看不到它) .

使用 vs2010 项目正在使用框架 4.0。

这是我的用法:

违规代码:

0 投票
2 回答
801 浏览

c# - 并行.用于中断

假设您有一个包含 1000 个随机整数的数组,并且您需要遍历它以找到数字 68。

在四核 CPU 上使用新的 Parallel.For 将显着提高速度,使每个核只工作 250 个数组项。

问题是:是否可以在满足以下条件时中断 Parallel.For 循环?

谢谢。