問題タブ [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 投票する
5 に答える
2595 参照

.net - .netで無料の構成をロックする

.netを初めて使用しますが、.netにAtomicInteger、ConcurrentLinkedQueueなどのJava版があるかどうかを知りたいですか?

私は少し検索をしましたが、何も思いつきませんでした。

ロックフリーアルゴリズムには、Javaの文書化されていないUnsafeクラスを通じて提供される、ある種のCAS命令が必要ですが、.netには同等のものがありますか?

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

.net - Microsoft の CCR と Task Parallel Library の比較

Microsoft は、同時操作のサポートを改善するために、少なくとも 2 つの異なるアプローチを採用しています。

1) Microsoft Robotics Studio およびCCR & DSS Toolkitの一部である Concurrency Coordination Runtime (CCR) です。

2) タスク並列ライブラリ ( TPL ) (.NET 4.0 の一部であり、現在 Beta 1 リリース)

これら 2 つの異なるソフトウェアを使用した経験があり、それらを比較対照できる人がいるかどうかを知りたいです。

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

.net-4.0 - 子タスクを実行および生成するときの一貫性のない結果

メインスレッドが新しいタスクを作成している単純なコードがあります。次に、タスクは複数の子タスクを生成します。メイン スレッドは、親タスクで「待機」を行います。プログラムを複数回実行しても同じ出力が得られないことに気付きました。以下のコードでは、各タスクの反復変数の値を出力していますが、異なる実行ではサブセットのみが出力されます。実行が順序付けられていないことは理解していますが、100 個の数字が出力されることを期待しているため (特定の順序ではありません)、実行を完了する必要があります。Wait を呼び出すと、すべての子タスクが完了するまで待機しませんか? VS2010 Team system Beta1 を実行しています

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

c# - .NET4.0「タスク並列ライブラリ」での進捗レポートと増分結果のサポート

タスク並列ライブラリはまだベータ版であり、利用できるリソースが少なくなる可能性が高いことを知っていますが、私が読んだものから、ライブラリはタスクのスケジューリング例外処理キャンセルに非常に特別な扱いをします。

しかし、進捗状況の報告とタスクからの増分結果の送信への参照は見つかりません。これらの2つのことは無視できないほど重要に思えます。タスク並列ライブラリでこれらを処理する方法に光を当てたり、それらを説明するいくつかの記事を参照したりできますか?

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

.net-4.0 - タスク並列ライブラリで現在実行されているタスクを確認する方法はありますか?

実行中のタスクを確認する方法がわかりません。Task.Current プロパティがありますが、複数のタスクが実行されている場合はどうでしょうか。この種の情報を取得する方法はありますか?

または、タスクの開始時または完了時に通知を受け取る組み込みの方法はありますか?

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

html - smartyの*.tplと*.htmlの違いは何ですか?

これに関する文書は見つかりませんでした。

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

c# - Parallel.ForEach 内でハッシュテーブルを使用していますか?

本体内で集中的な操作を実行する Parallel.ForEach ループがあります。

この操作では、Hashtable を使用して値を格納し、他の連続するループ項目に再利用できます。集中的な操作が完了した後に Hashtable に追加すると、集中的な操作を再度実行する代わりに、次のループ項目が Hashtable を検索してオブジェクトを再利用できます。

ただし、私は Parallel.ForEach を使用しているため、Hashtable.Add と ContainsKey(key) 呼び出しが並行して実行されている可能性があるため、非同期になるという安全でない問題があります。ロックを導入すると、パフォーマンスの問題が発生する可能性があります。

サンプルコードは次のとおりです。

このシナリオを処理できる API、TPL ライブラリ内のプロパティ設定が必要です。ある?

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

c# - データベースまたはサービスへのバッチリモート呼び出しを行う方法は?

あなた方の何人かがこれについていくつかの指針を与えることができることを願っています。

Webサービスやデータベースなどのリモートリソースを呼び出す必要があるコードを生成します。

このコードを考えてみましょう

50人の子供に対して、サービスに50回の呼び出しを行い、オーバーヘッドを50回取得します。私の実際の例では、これは簡単に100万回の呼び出しになり、すべてが這うようになります。

私がやりたいのは、呼び出し元のスレッド/タスクに対して透過的な方法でこれらの呼び出しをバッチ処理することです。したがって、サービスを直接呼び出す代わりに、これらの呼び出しをバッチ処理する中央キュー(「鉄道駅」)を呼び出します。

そのため、それを行うと、呼び出し元のタスクがブロックされます。次に、キューはX呼び出しが蓄積されるのを待ってから、要求のリストを使用してリモートサービスに1回呼び出します。

結果が来ると、このキューは戻り値を適切なタスクに返し、ブロックを解除します。呼び出し元のスレッドの場合、これはすべて非表示のままであり、別の関数呼び出しのように見えます。

これはできますか?これを可能にするプリミティブはTPLにありますか?

ちょっとCCRのような匂いがして、他の作業が完了するのを待っていると同時にたくさんのことが起こっています。

もちろん、このコードを書き直して、Parentクラスのリクエストのリストを作成してから、サービスを呼び出すこともできます。問題は、私の本当の問題では、このすべてのコードが生成されるということです。したがって、Child.RemoteCallの実装の「内部を調べる」必要があり、これはすべて、これまでよりもはるかに複雑になります。また、子はリモートオブジェクトなどのプロキシになる可能性があります。実行可能であれば非常に難しいので、この複雑さを分離したいと思います。

これが誰かに意味があることを願っています、そうでなければ私が詳しく説明することを私に知らせてください。

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

f# - タスク並列ライブラリと非同期ワークフロー

Task Parallel Library (Task and Future continuation chain) を多用して、並行コードを実行する c# で書かれたものがあります。

私は現在、これを F# に移植しており、F# Async ワークフローと TPL のコンストラクトを使用することの長所と短所を理解しようとしています。私はTPLに傾いていますが、どちらの方法でも可能だと思います。

F# で並行プログラムを作成する際のヒントや知恵を共有できる人はいますか?

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

.net - Parallel.Foreach が生成するスレッドが多すぎる

問題

ここで説明するコードは F# で作成しましたが、.NET 4 フレームワークに基づいており、特に F# の特殊性に依存しているわけではありません (少なくともそう思われます!)。

ディスクにいくつかのデータがあり、ネットワークから更新して、最新バージョンをディスクに保存する必要があります。

問題は、loadAndSaveAndUpdateすべてのデータに対して、関数を度も実行する必要があることです。

各ステップは

  • いくらかのディスク IO、
  • いくつかのデータクランチ、
  • いくらかのネットワーク IO (多くの遅延が発生する可能性あり)、
  • より多くのデータ処理、
  • およびいくつかのディスク IO。

これをある程度並行して行うとよいのではないでしょうか。残念ながら、私の読み取り機能と解析機能はどれも「非同期ワークフロー対応」ではありません。

私が思いついた最初の(あまり良くない)解決策

タスク

私が最初にしたことは、セットアップしてTask[]それらすべてを開始することでした:

次に、CTRL + ESC を押して、使用しているスレッドの数を確認しました。15、17、...、35、...、170、... アプリケーションを強制終了するまで! 何かがうまくいかなかった。

平行

私はほとんど同じことをしましたが、使用Parallel.ForEach(...)して結果は同じでした: たくさんのスレッドとたくさんのスレッド。

機能するソリューション...一種の

次に、使用可能なタスクがなくなるまで、nスレッドのみを開始しTask.WaitAll(of them)、次にその他のスレッドを開始することにしました。n

これは機能しますが、問題は、たとえばn-1タスクの処理が完了すると、多くのネットワーク遅延のためにブロックを主張する最後のタスクを待機、待機、待機することです。これは良くない!

では、この問題にどのように対処しますか? 非同期ワークフロー (およびこの場合、非同期関数を適応させる方法)、並列拡張、奇妙な並列パターンなどを含むさまざまなソリューションを表示していただければ幸いです。

ありがとう。