問題タブ [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 - .Net 4 の並列拡張に関する優れた学習教材
新しい Parallel Extensions と、MSDN を除く .Net 4 での使用に関する優れた学習資料を教えてください。
- .Net 4 での並列プログラミング
- 非並列プログラミング パラダイムと並列プログラミング パラダイムの基本的な違い
- 並列計算をサポートするデータ構造を作成する方法は?
無料でダウンロードできる素材が望ましいでしょう。
.net - この並列化コードはどの程度効率的ですか? それを行うより良い方法はありますか?
大規模な Lucene インデックスを作成しています。挿入する各ドキュメントは、挿入する前に少し「まとめる」必要があります。データベースからすべてのドキュメントを読み取り、それらをインデックスに挿入しています。Lucene を使用すると、いくつかの異なるインデックスを作成し、後でそれらをマージできるため、次のように考えました。
私が一時停止した唯一の懸念は、最初から最適な数のスレッドを作成するよりも、反復ごとにプールから IndexWriter をプルする (そして最後に戻す) ほうが効率が悪い可能性があることでした。 ConcurrentBag は非常に効率的で、処理のオーバーヘッドが非常に低くなります。
私の解決策は大丈夫ですか?それとも、より良い解決策を求めて叫びますか?
アップデート:
いくつかのテストの後、データベースからの読み込みは、実際のインデックス作成よりも少し遅いと思います。また、1 つのスレッドしか使用できず、16 のインデックスと約 170 万のドキュメントをマージしていたため、最終的なインデックスのマージも遅くなります。それでも、私は元の質問についての考えを受け入れています。
.net - 低速並列。割り込み用
コードをプロファイリングした後、Stop()
メソッドが完了するまでに時間がかかるため、実行速度のすべての Parallel.For ゲインが失われることがわかりました。これを改善する方法はありますか?多分電話Thread.Sleep()
?
ありがとう。
parallel-extensions - CloudTableQuery で Parallel.ForEach を安全に使用できますか
1 回限りのデータ暗号化を実行しようとしている Azure テーブルに妥当な数のレコードがあります。を使うことでスピードアップできると思いましたParallel.ForEach
。また、1,000 件を超えるレコードがあり、継続トークンをいじりたくないので、列挙子を取得するために CloudTableQuery を使用しています。
私の問題は、レコードの一部が二重に暗号化されていることであり、返された列挙子がどの程度スレッドセーフであるかがわからないことに気付きましたCloudTableQuery.Execute()
。この組み合わせで経験した人は他にいますか?
.net - 複数の非同期呼び出しに .Net Parallel Extensions (Parallel.Invoke) を使用していますか?
現在、データのさまざまなプロバイダーに対して約 7 つの Web サービス呼び出しを行う必要があるコードのセクションがあります。各呼び出しの実行には数秒かかるため、それらを並行して実行して速度を上げたいと考えています。
私は 7 つの呼び出しを Parallel.Invoke でラップしました。これは、同時にいくつかのことを実行するのに最適ですが、2 コア サーバーでは、コアごとに 1 つずつ、一度に 2 つしか実行されません。私がしているのは Web サービス呼び出しが返されるのを待っているだけなので、7 つすべてを取得して戻ってくるのを待ちたいと思います。
これを行う方法はありませんか?それとも私のアプローチが間違っているのでしょうか?Web サービスへの非同期呼び出しを作成する必要があるのでしょうか? しかし、次に進む前に、それらすべてが戻ってくるのをどのように待つのでしょうか?
wcf - EF4エンティティへの同時アクセス(並列+ EF4)
私は現在、EF4とWCFを使用してさまざまなチャネル(電子メール、プライベートメッセージ、アプリケーションメッセージ)で配信される何千ものメッセージを処理するディスパッチャサービスで働いています。
メッセージのディスパッチを高速化するために、Parallelsを使用しようとしています。
私のDispatchメソッドはリフレクションを使用してチャネル構成メソッドを照合し、各メッセージを同時に処理しますが、グローバルエンティティ(application_startで初期化されます)にSaveChanges()を作成すると、スレッド内のEFオブジェクトを更新しようとすると大きな問題が発生します
問題にはさまざまな種類があります。
- Nullオブジェクト参照
- リストアイテムプロパティはオブジェクトのキー情報の一部であり、変更できません。
- 基になるプロバイダーがOpenで失敗しました。
- セッションで実行されている他のスレッドがあるため、新しいトランザクションは許可されません。(閉じている場合は接続を強制的に開いた後)
問題は、EF4がこのシナリオを実装するためにスレッドセーフであるかどうかです。グローバルエンティティを持つという私のアプローチは最良の解決策ですか、それともタスクごとにEF4の初期化を行う必要がありますか?
どんな助けでも大歓迎です、私は可能な回避策を見つけようとしてすでに2時間を失いました。
c# - c# シミュレーションを並列化する
最初に並列化し、後で C# で Web サービスとして開発したいシミュレーション エンジンがあります。これは大量の CPU と RAM を必要とする集中的なシミュレーションであり、各実行を個別のスレッドに分割したいと考えています。より良いアイデアを提供するために、シミュレーションは 100 回実行でき、実行ごとにいくつかの結果を収集します。各実行から結果を収集し、それらを 1 つの大きなファイルにまとめるのは簡単です。たとえば、4 つのコアを備えたマルチコア マシンを使用している場合、各コアで 4 つの実行を実行し、次に別の 4 つの実行を実行するというアイデアです。3.5 で同じことを達成できますか、それとも 4.0 に移行した方がよいでしょうか? また、これを Web サービスにする場合に注意することはありますか? さらなるアイデアや提案は大歓迎です。
.net - 超並列スレッド読み取りによるAzureテーブルストレージのパフォーマンス
短いバージョン:パフォーマンスを桁違いに向上させるために、マルチスレッド方式で数十または数百のテーブルパーティションから読み取ることができますか?
長いバージョン:Azureテーブルストレージに数百万行を格納しているシステムに取り組んでいます。データを小さなパーティションに分割します。各パーティションには約500レコードが含まれます。これは、ユニットの1日分のデータを表します。
Azureには「合計」機能がないため、1年分のデータを取得するには、事前キャッシュを使用するか、AzureWebまたはワーカーの役割でデータを自分で合計する必要があります。
次のことを前提としています。-パーティションの読み取りが別のパーティションのパフォーマンスに影響を与えない-パーティションの読み取りには、ネットワーク速度とサーバーの取得に基づくボトルネックがあります。
次に、大量のデータ(1年、365パーティション)をその場ですばやく合計したい場合は、大規模な並列アルゴリズムを使用でき、スレッド数にほぼ完全に対応できると推測できます。たとえば、50以上のスレッドで.NET並列拡張を使用して、パフォーマンスを大幅に向上させることができます。
私たちはいくつかの実験の設定に取り組んでいますが、これが以前に行われたかどうかを確認したかったのです。.NET側は基本的にアイドル状態であり、待ち時間の長い操作を待機しているため、これはマルチスレッドに最適のようです。
task-parallel-library - Task Parallel Library - TaskContinuationOptions.OnlyOnCanceled to Fire を使用して継続を取得するにはどうすればよいですか?
.NET 4.0 でのタスク サポート、特に継続サポートを試しています。私が困惑しているのは、TaskContinuationOptions.OnlyOnCanceled
実行するように設定されたフラグを使用して継続を取得する方法がわからないことです。ワーカールーチンでa を実行するThrowIfCancellationRequested
と、キャンセル操作ではなく、障害として継続から伝播するように見えます。たとえば、次のコードがあるとします。
これは以下を出力します:
OnlyOnCanceled
継続が発生するようにワーカー (Sum) メソッドを終了するにはどうすればよいですか?
.net - Parallel.For() ループでの進行状況の更新
ご想像のとおり、Parallel.For() ループのインデックスは、ある値から別の値にジャンプします。完了した作業量を見積もるにはどうすればよいですか?
ありがとう。