プログラムのさまざまな部分をさまざまなプロセスに分離することは、(私にとって)すべてを単にスレッド化するよりもエレガントなプログラムを作成するように思えます。プログラムを異なるプロセスに分離するのではなく、スレッドで実行するのはどのシナリオで意味がありますか?いつスレッドを使用する必要がありますか?
シングルコアとマルチコアで異なる動作をする方法(またはするかどうか)も役立ちます。
次の2つの理由から、複数のプロセスよりも複数のスレッドを好むでしょう。
例:
GUIを使用するアプリケーションは通常、GUIに1つのスレッドを使用し、バックグラウンド計算に他のスレッドを使用します。たとえば、MS Officeのスペルチェッカーは、Officeユーザーインターフェイスを実行しているスレッドとは別のスレッドです。そのようなアプリケーションでは、代わりに複数のプロセスを使用すると、パフォーマンスが低下し、コードの作成と保守が困難になります。
以下のようなプロセスよりもスレッドを使用する利点とは別に
利点:
いくつかの欠点も考慮してください。
あなたの質問の重要な部分については、「いつスレッドを使うべきですか?」
スレッドがプログラムのセマンティクスを変更してはならないという事実をほとんど考慮しないでください。それらは単に操作のタイミングを変更します。その結果、ほとんどの場合、パフォーマンス関連の問題に対する洗練されたソリューションとして使用されます。スレッドを使用する状況の例を次に示します。
スレッドまたはプロセスが必要であることは既にわかっていると思いますので、どちらかを選択する主な理由はデータの共有にあると思います。
プロセスを使用するということは、プロセス間でデータをやり取りするためにプロセス間通信(IPC)も必要であることを意味します。ただし、プロセスを分離する場合、これは良いことです。
あなたは確かに初心者のように聞こえません。プロセスは、多くの点でよりエレガントであるという優れた観察結果です。スレッドは基本的に、メモリ空間間の過度の遷移や通信の過剰を回避するための最適化です。
表面的にスレッドを使用すると、スレッド間で変数とメモリを自由に共有できるため、プログラムの読み取りと書き込みが容易になるように思えるかもしれません。実際には、競合状態やデッドロックを回避するために、非常に慎重な注意が必要です。
プロセス間通信の効率を改善するために非常に一生懸命努力しているオペレーティングシステムカーネル(最も顕著な L4 )があります。このようなシステムの場合、おそらくスレッドは無意味であるという説得力のある議論をすることができます。
上記の回答のほとんどに同意します。しかし、設計の観点から言えば、論理的に関連する一連の操作を並行して実行したい場合は、むしろスレッドに行きたいと思います。たとえば、Wordプロセッサを実行すると、エディターとしてフォアグラウンドで実行される1つのスレッドと、バックグラウンドで実行される他のスレッドが定期的にドキュメントを自動保存するため、その自動保存タスクを個別に実行するプロセスを設計する人はいません。
他の答えに加えて、単一のプロセスの維持と展開は、いくつかの実行可能ファイルを保持するよりもはるかに簡単です。
複数のプロセス/実行可能ファイルを使用して、明確に定義されたインターフェイス/デカップリングを提供し、1つのプロセスですべての機能を保持するよりも簡単に再利用または再実装できるようにします。
この投稿に出くわしました。興味深い議論。しかし、1つのポイントが欠落しているか、間接的にポイントされていると感じました。
新しいプロセスの作成には、すべてのデータ構造を割り当てて初期化する必要があるため、コストがかかります。プロセスは、プロセス内でマルチスレッドを実現するために、制御の異なるスレッドに細分化されます。
スレッドまたはプロセスを使用して目標を達成することは、プログラムの使用要件とリソース使用率に基づいています。