问题标签 [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.
.net - 我可以从该字典的枚举循环中从 ConcurrentDictionary 中删除项目吗?
例如:
显然,使用普通 Dictionary<K,V> 会引发异常,因为删除项目会在枚举的生命周期内改变字典的内部状态。我的理解是 ConcurrentDictionary 并非如此,因为提供的 IEnumerable 处理内部状态更改。我理解对了吗?有没有更好的模式可以使用?
.net-3.5 - 并行扩展工作缓慢的原因
我试图通过使用并行扩展使我的计算应用程序更快。我是新手,所以我刚刚用 Parallel.ForEach 替换了主 foreach 循环。但是计算变得更慢了。降低并行扩展性能的常见原因有哪些?
谢谢
.net - Parallel.Invoke 对象列表的相同方法
我有一个带有方法 MyMethod 的类 MyClass。对于 MyClass 实例列表中的每个 MyClass 实例,我想调用 MyMethod 并让它们在单独的线程中运行。我正在使用 .NET 4.0 和并行扩展。
.net - 使用具有 ThreadStatic 属性的并行扩展。它会泄漏内存吗?
我正在大量使用并行扩展,并且我刚刚遇到了一种情况,即使用线程本地存储可能是明智的,以允许工作线程重用对象。因此,我正在查看 ThreadStatic 属性,该属性将静态字段/变量标记为每个线程具有唯一值。
在我看来,在不保证 PE 重用线程的情况下使用带有 ThreadStatic 属性的 PE 是不明智的。也就是说,如果线程在某种程度上被创建和销毁,变量(以及它们指向的对象)是否会在线程本地存储中保留一段不确定的时间,从而导致内存泄漏?或者也许线程存储与线程绑定并在线程被处理时被处理?但是,您仍然可能在池中拥有长期存在的线程,并且从线程用于的各种代码中积累线程本地存储。
有没有更好的方法来使用 PE 获取线程本地存储?
谢谢你。
c# - 如何使用多维数组调用 Parallel.ForEach
我在弄清楚如何Parallel.ForEach
使用二维字符串数组调用 时遇到了一些麻烦:
如果我没有明确指定类型,我会收到以下错误:
无法从用法中推断方法“System.Threading.Tasks.Parallel.ForEach(System.Collections.Generic.IEnumerable, System.Action)”的类型参数。尝试明确指定类型参数。
明确指定类型参数的正确方法是什么?
c# - 使用 Parallel.ForEach 在最小值中选择最小值
一般来说,我是 C# Parallel.ForEach
、. 和 .NET 的新手。我想并行化涉及数千个位置的搜索。对于每个位置,我计算大圆距离。这是我想推广到不同核心的计算。我的问题是,如果我只有一个线程局部变量,如在这个MSDN TPL 示例中,我该怎么做?对于结果,我查看了Interlocked
,并看到了它的选项Add
、CompareExchange
、Decrement
、和Exchange
,但我不只是添加、递增、递减或测试相等性。我想通过多个并行运行的线程返回总体最短的对象Increment
Read
距离。我的直觉说这应该很容易,我应该能够创建一些包裹 aLocation
和距离的小对象,但是我如何从每个线程中捕获最佳答案,然后选择其中最短的距离?这是非并行版本:
我确实看到了似乎提供了很好建议的DDJ 博客文章,但我想知道这是否是最好的建议。我看到作者在数组上循环,想知道是否没有更实用的方法来做到这一点。在函数世界中,我会使用map
,lambda
和min
.
unit-testing - 单元测试并发软件 - 你做什么?
随着软件变得越来越并发,您如何使用单元测试来测试类型的核心行为(不是并行行为,只是核心行为)?
在过去的美好时光里,你有一个类型,你调用它,然后检查它返回的内容和/或它调用的其他东西。
现在,您调用一个方法,实际工作被安排在下一个可用线程上运行;你不知道它什么时候真正开始并调用其他的东西——更重要的是,那些其他的东西也可能是并发的。
你如何处理这个问题?您是否抽象/注入并发调度程序(例如抽象任务并行库并在单元测试中提供假/模拟)?
你遇到过哪些对你有帮助的资源?
编辑
我编辑了问题以强调测试类型的正常行为(忽略任何用于利用多核的并行机制,例如 TPL)
c# - (Fluent) Nhibernate 延迟加载并影响 Parallel.ForEach
FetchMode.Eager
我有几个通过 FNH 配置的实体,以便在我请求实例(从数据库)时使用语法急切加载子实体。现在我的印象是,这会忽略映射中的任何延迟加载,并用“真实”数据填充子实体。
我想这样做的原因是因为我想使用 aParallel.ForEach
来迭代实体集合并生成一组结果,但是我收到以下错误:
如果我使用“NHibernateUtil.Initialize”来初始化所有子实体,那么它会按预期工作。
我对使用的理解有误FetchMode.Eager
吗?
.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。
这是我的用法:
违规代码:
c# - 并行.用于中断
假设您有一个包含 1000 个随机整数的数组,并且您需要遍历它以找到数字 68。
在四核 CPU 上使用新的 Parallel.For 将显着提高速度,使每个核只工作 250 个数组项。
问题是:是否可以在满足以下条件时中断 Parallel.For 循环?
谢谢。