このリンクのスレッドとプロセスの違いについて、投稿された多くの回答を読みました
ただし、共有メモリと分離メモリのように、それらを理解するのはまだ抽象的ですが、プログラムがあるように、スレッドがどの部分であり、プロセスがどの部分であるかを例を挙げて説明できますか?
どんな助けでも大歓迎です。
このリンクのスレッドとプロセスの違いについて、投稿された多くの回答を読みました
ただし、共有メモリと分離メモリのように、それらを理解するのはまだ抽象的ですが、プログラムがあるように、スレッドがどの部分であり、プロセスがどの部分であるかを例を挙げて説明できますか?
どんな助けでも大歓迎です。
ここで比喩を使ってみましょう。
あなたは大きな図書館で一人で宿題に取り組んでいます。あなたはそれを、問題ごとに経験します。1 つの問題が終わったら、別の問題に進みます。これは、シングル スレッド、シングル プロセスのアプリケーションです。
これがかなり遅いことに気付いたので、数人の友人を呼び出します (新しいスレッドを生成します)。いくつかの問題に並行して取り組むことができ、全員が同じ部屋にいるので、お互いに簡単に話すことができるので、より多くのことを成し遂げ始めます (共有メモリ)。残念ながら、参考書は 1 冊しかなく、それをどんどん回さなければなりません (共有リソース)。これにより、グループ メンバーの一部が同時に同様の問題 (リソースの競合、デッドロック) に取り組む必要がある場合に、議論が発生します。次に、グループ メンバーの 2 人が同時に矛盾する回答を書き留めようとして、喧嘩に巻き込まれるという問題がありました (同時実行エラー)。それは、共有メモリを使用したマルチスレッドです。
町の向こう側の図書館にその教科書の別のコピーがあることに気付きました。あなたは友人の何人かを送り (新しいプロセスを forking します)、彼らがこれまでに行ったすべてのことのコピー (copy memory ) を持って、そこで仕事をさせます。今では、彼らはより多くのことを成し遂げることができ、あなたとそれほど頻繁に戦うことはありません (リソースの競合が少なくなります) が、これにはコストがかかります.高い。さらに、しばらくすると、お互いに最新の状態に保つために多くの時間を費やさない限り、彼らの答えはあなたのものとは似なくなります。これはあなたの多くの時間を消費します (同期)。それは複数のプロセスです。
プログラムにグローバル変数があるとしましょう。スレッド化されたプログラムでは、すべてのスレッドが同じグローバル変数を共有するため、1 つのスレッドで変更すると、すべてのスレッドで変更されます。一方、新しいプロセスをフォークすると、グローバル変数は異なるプロセスで分離され、あるプロセスでの変更は別のプロセスに反映されません。