0

私はJavaの世界が初めてです。いくつかの名前は、私にはとてもおもしろく聞こえます。

そのうちの 1 つが fork です。

いつもそうですか?

例: can という関数が表示された場合、その関数pid forkAndExec(String... commands)は常に並列で実行されると想定します。

ありがとう

4

2 に答える 2

4

プロセスを「フォーク」するとは、通常、現在のプロセスの新しいカーボンコピーを作成することを意味します。この用語は、新しい別の子プロセスを作成することを意味するために乱用されることがあります。ここまでは順調ですね。

ただし、「並列」の仮定は保証されません。実際には Java に依存するのではなく、それが実行されるプラットフォーム、つまりハードウェアと OS レイヤーの両方に依存します。

フォーク関数が実際に新しいプロセスを作成すると安全に想定できます (私はそう思います)。でも:

  • そのプロセスが実際にバックグラウンドでどのように作成されるかは、JVM の実装次第です。
  • そのプロセスがどのように管理され、実行されるかは、オペレーティング システム(より正確には、カーネルのスケジューラー) 次第です。
  • スケジューラが実際に並行性を実装できるかどうかは、ハードウェアの仕様次第です。

スケジューラは次のことができます。

  • うまくやって、複数のコアまたは実際のプロセッサ間で真の並列化を提供することを決定し、
  • または、タイムスライスを使用して同時実行の錯覚を与える可能性があります。
  • または、あなたにとって意地悪で、プロセスがキューに入れられると判断する可能性があります.

また、プログラムは、あなたが話している並列化を妨げないように実装する必要があります (たとえば、親プロセスが子プロセスの実行を無期限に待機するように設定されている場合、それはそれらが同時に実行されることをほとんど意味しません...一方はもう一方が追いつくのを待っているだけです)。

また、forkAndExec について言及しています。これらも混同しやすいので注意が必要です。多くの言語の一部の関数は、新しいプロセスを fork して既存のプロセスを置き換えますが、他の関数は 2 つのプロセスを作成し、それらを並行して実行しようとします。

于 2012-06-08T01:44:20.253 に答える
1

あなたはプログラミングの世界に不慣れなようです。そこにある多くのイディオムは、まったく別のものを意味するもののために英語から借用しています。これらは多くの場合、fork のように比喩ですが、通常、プログラミングの世界の意味をその外部の意味から推測することはできません。ウィキペディアで検索する場合は、曖昧さ回避に移動して、コンピューティング コンテキストの下を調べる必要があります。そこには、プロセスを作成する方法があります。

于 2012-06-08T01:45:25.057 に答える