私はC#を学ぼうとしています!私はプログラミング言語間のJavaに最も精通しています!ちょうど今、私はTask
のを理解しようとしています!Task
Javaのようなものはありますか?
Task
とスレッドの違いは何ですか?Task
スレッドができないことを提供するものは何ですか?基本的に、なぜが必要なTask
のですか?
私はC#を学ぼうとしています!私はプログラミング言語間のJavaに最も精通しています!ちょうど今、私はTask
のを理解しようとしています!Task
Javaのようなものはありますか?
Task
とスレッドの違いは何ですか?Task
スレッドができないことを提供するものは何ですか?基本的に、なぜが必要なTask
のですか?
最も近い 1:1 クラスはFuture<T>
orCompletableFuture<T>
です。には、C#CompletableFuture
のものと同様の追加の連鎖メソッドがいくつかあります。Task<T>
どうやらタスク並列ライブラリ (C#) の初期のバージョンでは( http://www.nedstoyanov.com/promises-and-futures/ )Task<T>
と呼ばれていました。Future<T>
Java 7 で導入された Fork/Join フレームワークは、おそらく最も近いものです。
http://docs.oracle.com/javase/tutorial/essential/concurrency/forkjoin.html
タスクはやりたいこと、スレッドはタスクを実行するもの
例: リクエストごとに新しいスレッドを開始する Web サーバー
class ThreadPerTaskWebServer {
public static void main(String[] args) throws IOException {
ServerSocket socket = new ServerSocket(80);
while (true) {
final Socket connection = socket.accept();
Runnable task = new Runnable() {
public void run() {
handleRequest(connection);
}
};
new Thread(task).start();
}
}
}
ドキュメントを見ると、タスクはマルチスレッド プログラミングを行うための推奨される方法であると記載されています。
システム リソースのより効率的でスケーラブルな使用。
バックグラウンドで、タスクは ThreadPool のキューに入れられます。ThreadPool は、スループットを最大化するスレッド数を決定して調整するアルゴリズム (山登り法など) で強化されています。これにより、タスクが比較的軽量になり、多くのタスクを作成して細粒度の並列処理を有効にすることができます。これを補完するために、広く知られているワークスティーリング アルゴリズムを使用して負荷分散を提供します。
スレッドまたはワークアイテムよりもプログラムによる制御が可能です。
タスクとその周りに構築されたフレームワークは、待機、キャンセル、継続、堅牢な例外処理、詳細なステータス、カスタム スケジューリングなどをサポートする API の豊富なセットを提供します。
したがって、タスクは実際にはスレッドですが、より簡単なインターフェイスを備えています。基本的にあなたと同じことを尋ねるこの質問を見ることもできます: SO質問