問題タブ [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のインデックス作成

Luceneインデックスへの10GBのデータのインデックス作成を高速化したいと思います。TPLはこれを行うための良い方法でしょうか?データをチャンクに分割してから、各スレッドにチャンクのインデックス作成を開始させる必要がありますか?

UIのレスポンシブを維持するには、BackgroundWorkerが最善のアプローチ、タスク、またはその他の方法でしょうか。

SOLRはすでにこのようなことをしていますか?それとも、これを自分でコーディングする価値はありますか?

0 投票する
4 に答える
21906 参照

wpf - .NET4にThreadsafeObservableコレクションはありますか?

プラットホーム:WPF, .NET 4.0, C# 4.0

問題:Mainwindow.xamlに、現在ObservableCollection<Customer>であるCustomerコレクションにバインドされたListBoxがあります。

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

このコレクションは、FileSystem、WebServiceなどの複数のソースを介して更新できます。

顧客の並列ロードを可能にするために、ヘルパークラスを作成しました

public class CustomerManager(ref ObsevableCollection<Customer> cust)

これは、顧客ソースごとに(Parallel Extensionsライブラリから)新しいタスクを内部的に生成し、顧客コレクションオブジェクトに新しいCustomerインスタンスを追加します(そのctorにrefによって渡されます)。

問題は、ObservableCollection <T>(またはそれに関するコレクション)をUIスレッド以外の呼び出しから使用できず、例外が発生することです。

「NotSupportedException–このタイプのCollectionViewは、Dispatcherスレッドとは異なるスレッドからのSourceCollectionへの変更をサポートしていません。」

使ってみました

System.Collections.Concurrent.ConcurrentBag<Customer>

コレクションですが、INotifyCollectionChangedインターフェイスを実装していません。したがって、私のWPFUIは自動的に更新されません。

それで、プロパティ/コレクション変更通知の両方を実装し、他の非UIスレッドからの呼び出しも許可するコレクションクラスはありますか?

私の最初のビング/グーグルでは、箱から出して提供されるものはありません。

編集:ConcurrentBag <Customer>を継承し、 INotifyCollectionChangedインターフェイスも実装する独自のコレクションを作成しました。しかし、驚いたことに、別々のタスクで呼び出した後でも、タスクが完了するまでWPFUIがハングします。タスクは並行して実行され、UIスレッドをブロックしないことになっていますか?

事前にご提案ありがとうございます。

0 投票する
3 に答える
495 参照

c# - 並列処理と同期

マルチコア システムで並列処理を利用しているとします。

同じ命令が同時に実行される可能性は完全にありませんか?

次のコードを使用します。

私の頭の中では、複数のコアと並列処理を備えたシステムでは、blockingCondition が正確に同時にチェックされ、同時にロックが試行されるなどの可能性が非常に高いようです...真実?

もしそうなら、どうすればプロセッサ間の同期を保証できますか?

また、.net TPL はこのタイプの同期を処理しますか? 他の言語はどうですか?

編集これはスレッドに関するものではなく、タスクと並列処理に関する ものであることに注意してください。

EDIT 2 OK、情報をありがとう。では、OS がメモリへの書き込みがシリアル化され、揮発性読み取りによるマルチコア同期が保証されるというのは本当ですか?

0 投票する
1 に答える
862 参照

c# - Parallel.null オブジェクトとの同期用

私はSystem.Threading.Tasks.Parallel.Forいくつかの重い処理を行うために使用しています。

私のコードは次のとおりです。

リストで null になるとは思いませんが、そうです。どういうわけかの使用を台無しにしているに違いありませんindex。何か案は?

0 投票する
2 に答える
280 参照

c# - 比較的大きなループに並列化を使用する

8 GB メモリを搭載した 8 コア CPU マシンを使用しています。論理的には、次のコードは並列で実行できますが、ループのサイズよりも使用可能なコアがはるかに少ないため、ループは並列処理の機会を十分に提供します。次に、すべてのデリゲート式は、自由変数を保持するためにいくらかのメモリを割り当てます。この場合、parallel for を使用することをお勧めしますか?

また、この場合、2 つの並列 for を 2 つのタスクに分離すると、パフォーマンスが向上しますか??

0 投票する
2 に答える
1665 参照

c# - 並列:適切に同期する方法

次の非常に単純なシナリオがあります。一部のデータは、パーティション化できるDB(かなり大きなコレクション)に書き込む必要があります。しかし、私には2つの問題があります。

  1. 簡単な方法:プログレスバーを印刷するオプションが必要です。これにより、これまでに挿入されたレコードの数を知ることができます(スレッド間での共有カウンターのようなものです)。

  2. 難しいもの:各レコードにはタイムスタンプを付ける必要があります。タイムスタンプには開始時刻と間隔があります。残念ながら、タイムスタンプはレコードの一部ではありませんが、シーケンシャルプログラミングでは、現在のタイムスタンプを特定の間隔でインクリメントすることで簡単に計算できます。

これまでのところ、問題は、上記の制約を適切に実装する方法ですか?反復を促進するときに実行されているコードからループ本体を分離することはどういうわけか可能ですか(++iまたはnewTimeStamp = oldTimeStamp.AddSeconds(...)、並列化されるループ本体とは対照的に、その種のコードは常に単一のスレッドで実行されますか?可能であれば、コードスニペットは非常に役立ちますが、ポインタ/名前/キーワードさえも取得できます。ありがとうございます。

0 投票する
1 に答える
1752 参照

task-parallel-library - Task Parallel Library - TaskContinuationOptions.OnlyOnCanceled to Fire を使用して継続を取得するにはどうすればよいですか?

.NET 4.0 でのタスク サポート、特に継続サポートを試しています。私が困惑しているのは、TaskContinuationOptions.OnlyOnCanceled実行するように設定されたフラグを使用して継続を取得する方法がわからないことです。ワーカールーチンでa を実行するThrowIfCancellationRequestedと、キャンセル操作ではなく、障害として継続から伝播するように見えます。たとえば、次のコードがあるとします。

これは以下を出力します:

OnlyOnCanceled継続が発生するようにワーカー (Sum) メソッドを終了するにはどうすればよいですか?

0 投票する
5 に答える
647 参照

.net - 並列拡張機能を使用していますか?

これがstackoverflowの誤用でないことを願っています。最近、Parallel Extensions に関するすばらしい質問をいくつか目にし、興味をそそられました。

私の質問: Parallel Extensions を使用していますか?

Stephen Toub と申します。Microsoft の Parallel Computing Platform チームに所属しています。Parallel Extensionsを担当するグループです。開発者が Parallel Extensions (例: Parallel.For、PLINQ、ConcurrentDictionary など) をどのように利用しているか、あなたが経験した肯定的な経験、否定的な経験、将来の機能要求などについて聞くことに常に興味があります。の上。
そのような情報を共有していただける場合は、この質問への回答としてここに送信するか、個人的にstoub at microsoft dot com.

私はあなたからの連絡をとても楽しみにしています。

前もって感謝します!

0 投票する
4 に答える
6351 参照

c# - C# Parallel.For ループの増分値の変更

TPL を使用して、パスごとに反復子を 2 ずつインクリメントする for ループを並列 For ループに変換したいと考えています。データは順序に依存したり制約されたりすることはありませんが、ソース配列の他のすべての要素 (以下のコードでは _Datalist) のデータのみを処理したいので、2 ずつインクリメントする必要があります。

私のForループ:

i を 1 ではなく 2 ずつインクリメントすることを並列ループに伝えることはできますか?

ここに並列ループがありますが、明らかに i は反復ごとに 1 だけ増加します。

i の奇数の値を無視するように内側のループ本体に指示することもできますが、それは少し厄介なようです。ループの初期化で何らかの方法でそれを行う方法はありますか?