2011-07-05 11 views
1

メインプログラムから新しい(java)スレッドにタスクを分けることを検討しています。 2番目のタスクはリソースを消費することがあります(メインプログラムの「ウェルビーイング」に対する懸念が生じます)。タスクを新しいJavaスレッドと新しいプロセスに分割する

2番目のタスクを(コマンドラインから呼び出す場合と同じように)完全な別プロセスとして実行するか、新しいJavaスレッドで実行するかの違いはありますか?

This linkは、Solarisの基礎となるスレッドの実装(Javaスレッドとカーネルスレッドの間の1-1マッピング)について理解しています。

Linuxで何が期待できますか?

おかげで、

アリエル

+0

「違いはありますか?」とはどういう意味ですか?コードを実装するためにコードの違いを意味しますか?それとも、マシンリソースがどのように影響を受けるかに違いがあるのでしょうか? – Erik

答えて

3

は一般的に言えば、別のプロセスが別のスレッドとして、それを実行しないよりもタスクの重い分離を伴うとして実行されています。タスクがメモリ内の状態を共有する必要がある場合は、スレッドベースの実装に向かうでしょう。さもなければ、別のプロセスが意味をなさないかもしれません。

あなたが言及している「幸福」の懸念 - それは本当の懸念です。タスクが論理的に分離可能な場合、ここでは別のプロセスを使用することが理にかなっています。これは、リソース集約型プロセスが別のプロセスを中断しないようにするためです。負荷の特性が異なると、1つのタスクを取り出して、それをよりよくサポートできるインフラストラクチャに移動させたいということがよくあります。

私はスレッドの実装の詳細がここでの駆動要因であるとは思わない。プロセスの使用とスレッドの使用の間の決定は、より高いレベルで行われます。あなたが考えることができ

2

もの:

  1. それらの間のすべての通信があります。はいの場合、プロセス間通信はスレッド間通信よりも複雑です。
  2. 2つ目のタスクを別のマシンに分離してパフォーマンスを達成できる可能性がある場合(おそらくは将来的にも)、プロセスに分離するよりも有益な場合があります。
  3. 2つのプロセスに分割すると、展開/管理の問題が増えますか?