Java はマルチスレッドを適切にサポートし、Java は Process、ProcessBuilder、および Runtime.exec() を介してマルチプロセスもサポートしています...
スレッドとプロセスの定義と、OS の概念におけるそれらの違いを明確に知っています。
しかし、Java アプリケーションでマルチスレッドの代わりにマルチプロセスを使用する必要があるのは、なぜ、どのような状況でしょうか?
Java はマルチスレッドを適切にサポートし、Java は Process、ProcessBuilder、および Runtime.exec() を介してマルチプロセスもサポートしています...
スレッドとプロセスの定義と、OS の概念におけるそれらの違いを明確に知っています。
しかし、Java アプリケーションでマルチスレッドの代わりにマルチプロセスを使用する必要があるのは、なぜ、どのような状況でしょうか?
頭の上で、processes
の補完として使用する理由threads
は次のとおりです。
それでも、ほとんどのアプリケーションthreading
では、メモリ上の理由、スポーンの容易さ、および (比較的) シンプルな使いやすさから好まれるツールです。
プロセスを必ずしもスレッドの代わりと考えないでください。Java のプロセスは、外部コマンドを実行する便利な方法です。これらは、開始と同期が面倒なため、一般的な並列処理のシナリオではあまり役に立ちません。
それらのもう 1 つの適切な使用法は、スタック オーバーフローが終了したり原因になったりしない可能性があるネイティブ コード (または制御できないその他のコード) を分離することです。これがスレッド内で実行されると、プロセス全体がダウンする可能性があります。代わりに、新しいプロセスを生成してから、あまり気にせずに強制的に終了させることができます。
JVM にはランナウェイ保護はありません。
停止しないスレッドがある場合、それを強制的に停止する唯一の方法は、オペレーティング システムにその JVM を強制終了させることです。個別のプロセスを持つことで、アプリケーションの残りの部分を実行し続けることができます。
同期が問題にならない場合、つまりプロセスが同じデータに干渉しない場合に必要になることがありますが、これらのプロセスの出力を同時に収集する必要があります。つまり、完全に異なるプロセスを並行して実行する必要があります。プロセス。
状況によりますが、簡単な答えはありません。OS/JVM に応じて、スレッドとプロセスは異なる意味を持ち、異なるレベルの分離を持つ可能性があります。
なぜ両方を使用する能力があるのですか?? ここに例があります
スレッド セーフではない (または保証がない) レガシまたはサードパーティのネイティブ (C++) ライブラリを使用する必要があるシナリオを考えてみましょう。多数のプロセッサを利用するためにサーバーを合理化する必要があると思います。マルチプロセス アーキテクチャの方が適しています。
隔離
エラー処理
JVM 用ではないが、o/s コマンド ラインを使用して実行できるプログラムを実行する必要がある場合、それをスレッドとして実行することはできず、プロセスとしてのみ実行します。