問題タブ [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.
c# - Java の Task Parallel Library に相当するもの
Java には (.NET 4.0 の) タスク並列ライブラリに相当するものはないと思います。本当?.NET のこの機能が提供し、Java の同時実行では提供されない改善点は何ですか。
c# - タスクとスレッドの違いは何ですか?
C# 4.0 ではTask
、System.Threading.Tasks名前空間にあります。Thread
との本当の違いは何ですかTask
。私は自分自身で学習するために、いくつかのサンプルプログラム(MSDNから取得したヘルプ)を作成しました
しかし、アイデアがそれほど明確ではないため、多くの疑問があります。
最初に Stackoverflow で同様のタイプの質問を検索しましたが、この質問のタイトルで同じものを取得できなかった可能性があります。以前にここに投稿されたのと同じタイプの質問について誰かが知っている場合は、リンクの参照を親切に提供してください。
asp.net-4.0 - Parallel.Foreachは収集順序を維持しますか?
使用時に注文を保証する方法はありParallel.ForEach()
ますか?私がループしているコレクションは、その順序を維持する必要がありますが、パフォーマンスの向上を探していました。
c# - ディレクトリトラバーサル用タスク並列ライブラリ
ハード ドライブのディレクトリを走査し、すべてのファイルから特定の検索文字列を検索したいと考えています。これは、IO がかなり遅いため、並行して実行できる (または実行する必要がある) 何かの完璧な候補のように思えます。
従来、現在のディレクトリ内のすべてのファイルを検索して処理し、そのディレクトリ内のすべてのディレクトリに再帰する再帰関数を記述していました。これをどのように変更してより並列化できるか疑問に思っています。最初は単純に変更しました:
に
しかし、これはあまりにも多くのタスクを作成し、特に UI スレッドにディスパッチしようとするときに、結び目を作る可能性があると感じています。また、タスクの数は予測不可能であり、これはこのタスクを並列化する効率的な方法ではない可能性があると感じています (それは言葉ですか?)。
以前にこのようなことを成功させた人はいますか? その際、どのようなアドバイスがありますか。
c++ - 同時実行ランタイムで、非const関数オブジェクトでparallel_invokeまたはtask_groupを使用できますか?
Visual C ++ 2010で同時実行ランタイムを使用していて、parallel_invokeおよびtask_group(PPLまたは並列パターンライブラリの一部)の機能に興味があります。(ラムダ関数や関数ポインターではなく)関数オブジェクトを介して2つの並列アクションを開始できるようにしたいのですが、エラーのためにコードをコンパイルできません:
しかし、C :: operator()()をconstにすると、関数オブジェクトの多くの利点が失われます。つまり、その状態は変更可能であり、呼び出し間で内部的に維持されます。ここで何かが足りませんか?非定数関数オブジェクトを並行して呼び出す方法はありますか?
ところで、非同期エージェントライブラリを使用して、Concurrency :: agentクラスからクラスを派生させることができることを認識していますが、この質問の範囲を超えていることを考慮してください(一部には例外処理とキャンセルオプションがないため)。
PPLで何ができるかに興味があり、ラムダ関数と関数ポインターを使用した例はありますが、並列の「HelloWorld」以上の機能を実行する関数オブジェクトを使用した例を見つけたり作成したりすることはできませんでした。関数オブジェクトと、可能であれば並行コンテナーも実際に活用するものを探しています。
.net - 複数の並列 Task.ContinueWith の実行順序
質問
これはおそらく私が見逃した単純なものです。
私がそうしているとしましょう(loveley VBで):
t1.ContinueWith が 2 回使用されていることに注意してください。これらのタスクの優先実行順序は? 私にとって、それはランダムか間違っています。
なんで?
やりたい理由は…
- データを取得して返すタスクを作成する
- 続いて、UI を「整理」するタスク
TaskScheduler.FromCurrentSynchronizationContext()
(UI スレッド) - データを長いレポートに変換して、元のデータ取得タスクに従います (時間がかかります)。
- UI スレッドに戻り、そのレポートをプレビュー コントロールに割り当てます。
- クリーンアップ (進捗アニメーションなどを取り除く)
これは、ステップ 4 がオプションであるため、さらに複雑になります。
これらすべての最中に、UI とタスクが適切に機能するように、私のタスクは逆方向に曲がってメンバー プロパティを設定しています。おそらく、タスクの結果を完全に捨てて、メンバー変数の同期に固執する必要があります。結局、それらはすべて一度だけ割り当てられます。
ありがとう、トム
c# - 並列化に関する考慮事項
私はこれについてコミュニティの視点を得たいと思っています。DB/IO に大きく依存するプロセスがある場合、Task Parallel ライブラリを使用して個々のプロセス パスを並列化するのはどの程度賢明でしょうか?
例を使用します...アイテムがたくさんあり、次の操作を行う必要がある場合
- 項目のリストについて DB にクエリを実行する
- パラメータの動的リストに基づいて特定の項目をグループ化するために、いくつかの集計操作を実行します。
- グループ化された結果ごとに、集計結果に基づいてデータベースにクエリを実行します。
- グループ化された結果ごとに、いくつかの数値計算を行います (3 と 4 が順番に行われます)。
- #3 で計算した結果に対していくつかの挿入と更新を行います
- #1で返された各アイテムに対していくつかの挿入と更新を行います
論理的に言えば、ステップ 3、5、6 でタスクのグラフに並列化できます。これは、1 つの項目が前の結果に影響を与えないためです。ただし、これらはそれぞれデータベース (SQL サーバー) で待機しますが、これは問題なく、SQL サーバーが許可する範囲でしか処理できないことを理解しています。
しかし、ローカル マシン上でタスクを論理的に分散させて、データベースが処理するのと同じくらい速く処理できるようにしたいと考えています。私は、db 呼び出しを Thread.Sleeps に置き換えたモック プロトタイプをいくつか作成しました (.SpinWait を使用していくつかのバリエーションも試しましたが、これは 100 万倍高速でした)。並列バージョンは、完全にシリアルである現在の実装よりもずっと高速です。まったく平行ではありません。
私が恐れているのは、SQL サーバーに過度の負担をかけることです...この道を進みすぎる前に、考慮すべき考慮事項はありますか?
.net-4.0 - Task Parallel Library で将来の実行のためにタスクをスケジュールする方法
Task Parallel Library を使用して将来実行するタスクをスケジュールする方法はありますか?
System.Threading.Timer などの .NET4 以前のメソッドを使用してこれを実行できることはわかっていますが、これを行う TPL の方法がある場合は、フレームワークの設計内に留まりたいと思います。しかし、私はそれを見つけることができません。
ありがとうございました。
php - Javascript で複数の LI を UL に分割する
JavaScript を使用して、複数の LI を 2 つの UL に分割する必要があります。
私が編集できる唯一のコードはテンプレートファイルです:
このファイルに PHP を追加することはできないため、JavaScript で解決したいと考えています。
Javascript で UL 内の LI をカウントし、LI で 2 つの UL を作成するようにしたい
結果は次のようになります。
サイトはプロトタイプを使用しています。誰かがこれの例を知っていますか、またはどのように始めるべきですか? 前もって感謝します!!
c# - Task を非同期に待機するタイムアウトで完了する
Task<T>がいくつかの特別なルールで完了するのを待ちたい: X ミリ秒後に完了していない場合、ユーザーにメッセージを表示したい。Y ミリ秒経過しても完了しない場合は、自動的にキャンセルを要求したいと考えています。
Task.ContinueWithを使用して、タスクが完了するのを非同期的に待機できます (つまり、タスクが完了したときに実行されるアクションをスケジュールします) が、タイムアウトを指定することはできません。Task.Waitを使用して、タスクがタイムアウトで完了するのを同期的に待機できますが、それによってスレッドがブロックされます。タスクがタイムアウトで完了するのを非同期的に待機するにはどうすればよいですか?