问题标签 [task-parallel-library]

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 投票
3 回答
5703 浏览

c# - 在多台计算机上使用任务并行库

有没有办法在多计算机场景中使用任务并行库?

我的意思是,如果我有大量任务,我可以通过 LAN 安排服务器数量吗?

0 投票
2 回答
1777 浏览

concurrency - 使用并行扩展索引 Lucene

我想加快将 10GB 数据编入 Lucene 索引的速度。TPL 会是一个很好的方法吗?我是否需要将数据分成块,然后让每个线程开始索引块?

为了保持 UI 响应,BackgroundWorker 是最好的方法,还是 Task,还是别的什么?

SOLR 是否已经做了这样的事情?还是自己编写代码仍然值得。

0 投票
4 回答
21906 浏览

wpf - .NET 4 中是否有 Threadsafe Observable 集合?

平台:WPF, .NET 4.0, C# 4.0

问题:在 Mainwindow.xaml 中,我有一个绑定到 Customer 集合的 ListBox,该集合当前是 ObservableCollection<Customer>。

ObservableCollection<Customer> c = new ObservableCollection<Customer>();

该集合可以通过多个来源进行更新,例如 FileSystem、WebService 等。

为了允许并行加载客户,我创建了一个辅助类

public class CustomerManager(ref ObsevableCollection<Customer> cust)

它在内部为每个客户源生成一个新任务(来自并行扩展库),并将一个新客户实例添加到客户集合对象(通过 ref 传递给它的 ctor)。

问题是 ObservableCollection< T> (或与此相关的任何集合)不能从 UI 线程以外的调用中使用,并且遇到异常:

“NotSupportedException – 这种类型的 CollectionView 不支持从不同于 Dispatcher 线程的线程更改其 SourceCollection。”

我尝试使用

System.Collections.Concurrent.ConcurrentBag<Customer>

集合,但它没有实现 INotifyCollectionChanged 接口。因此我的 WPF UI 不会自动更新。

那么,是否有一个集合类既实现了属性/集合更改通知,又允许来自其他非 UI 线程的调用?

通过我最初的 bing/谷歌搜索,没有提供开箱即用的功能。

编辑:我创建了自己的集合,它继承自ConcurrentBag< Customer >并且还实现了INotifyCollectionChanged接口。但令我惊讶的是,即使在单独的任务中调用它之后,WPF UI 也会挂起,直到任务完成。任务不应该并行执行而不阻塞 UI 线程吗?

提前感谢您的任何建议。

0 投票
3 回答
495 浏览

c# - 并行与同步

想象一下,您正在多核系统中使用并行。

相同的指令不能同时执行吗?

采取以下代码:

在我的脑海中,似乎很有可能在具有多核和并行性的系统上,blockingCondition 可以在同一时刻被检查,导致同时尝试锁定,等等......这是真的?

如果是这样,您如何确保跨处理器的同步?

此外,.net TPL 是否处理这种类型的同步?其他语言呢?

编辑 请注意,这不是关于线程,而是关于任务和并行处理。

编辑 2 好的,谢谢大家的信息。那么操作系统是否会确保对内存的写入是序列化的,通过易失性读取确保多核同步?

0 投票
1 回答
862 浏览

c# - Parallel.For 与空对象同步

System.Threading.Tasks.Parallel.For用来做一些重量级的处理。

我的代码是:

我不希望在列表中得到空值,但我是。我一定是搞砸了index不知何故的使用。有任何想法吗?

0 投票
2 回答
280 浏览

c# - 对较大的循环使用并行化

我有一台具有 8 GB 内存的 8 核 CPU 机器。从逻辑上讲,以下代码可以并行完成,但是由于循环提供了足够多的并行机会,因为可用的内核远少于循环的大小。其次,每个委托表达式都会分配一些内存来保存自由变量。在这种情况下是否建议使用并行?

在这种情况下,将 2 个并行 for 分成 2 个任务也会提高性能吗?

0 投票
2 回答
1665 浏览

c# - 并行:如何正确同步

我有以下相当简单的场景:需要将一些数据写入可以分区的数据库(相当大的集合)中。但是我有两个问题:

  1. 简单的一个:希望有一个打印进度条的选项,以便不时知道到目前为止已经插入了多少条记录(有点像线程之间的共享计数器)。

  2. 更难的一个:每条记录都需要附有时间戳。时间戳具有开始时间和间隔。不幸的是,时间戳不是记录的一部分,但在顺序编程中,可以简单地通过将当前时间戳增加特定间隔来计算。

到目前为止,问题是:如何正确实施上述约束?是否有可能在促进迭代时将循环体与正在执行的代码分开(++i或者newTimeStamp = oldTimeStamp.AddSeconds(...),这样这种代码将始终在单个线程上执行,与将被并行化的循环体相反?如果可能的话,代码片段将非常有帮助,尽管我很乐意获得任何指针/名称/关键字。谢谢。

0 投票
1 回答
1752 浏览

task-parallel-library - 任务并行库 - 如何通过 TaskContinuationOptions.OnlyOnCanceled 获得继续触发?

我正在试验 .NET 4.0 中的任务支持——特别是继续支持。我感到困惑的是,我无法弄清楚如何让TaskContinuationOptions.OnlyOnCanceled标志设置为继续执行。如果我ThrowIfCancellationRequested在我的工作例程中执行 a ,它似乎只会作为错误而不是取消操作传播出延续。例如,给定以下代码:

这输出:

如何退出我的工人(总和)方法以使OnlyOnCanceled延续被解雇?

0 投票
5 回答
647 浏览

.net - 你在使用并行扩展吗?

我希望这不是对 stackoverflow 的滥用;最近我在 Parallel Extensions 上看到了一些很棒的问题,这激起了我的兴趣。

我的问题:您是否使用并行扩展,如果是,如何使用?

我叫 Stephen Toub,在 Microsoft 的并行计算平台团队工作。我们是负责并行扩展的小组。我一直很想了解开发人员如何使用并行扩展(例如 Parallel.For、PLINQ、ConcurrentDictionary 等)、您的积极体验、消极体验、对未来的功能要求等等上。
如果您愿意分享此类信息,请在此处作为对此问题的回复或通过电子邮件私下给我stoub at microsoft dot com

我非常期待收到您的来信。

提前致谢!

0 投票
4 回答
6351 浏览

c# - 更改 C# Parallel.For 循环的增量值

我想使用 TPL 将每次通过 2 递增迭代器的 for 循环转换为并行 For 循环。数据不依赖于顺序或以任何方式受到约束,但我只想处理源数组的每个其他元素中的数据(在下面的代码中为 _Datalist),因此需要增加 2。

我的 For 循环:

是否可以告诉并行循环我想将 i 增加 2 而不是 1?

这是并行循环,但显然 i 每次迭代只增加 1:

我可以告诉内部循环体忽略 i 的奇数值,但这似乎有点混乱 - 有没有办法在循环初始化中以某种方式做到这一点?