プロセスとスレッドの技術的な違いは何ですか?
プロセスという言葉は使い古された感がありますし、ハードウェアやソフトウェアのスレッドもありますよね。Erlang]1のような言語の軽量プロセスはどうですか?どちらかの用語を使う決定的な理由はあるのでしょうか?
プロセスもスレッドも、独立した実行シーケンスです。典型的な違いは、(同じプロセスの)スレッドが共有メモリ空間で実行されるのに対し、プロセスは個別のメモリ空間で実行されることです。
ハードウェア」と「ソフトウェア」のスレッドが何を指しているのかわかりません。スレッドは、CPUの機能ではなく、OSの機能です(ただし、CPUは通常、スレッドを効率的に動作させるための操作を行います)。
Erlangでは共有メモリマルチプログラミングモデルを公開していないので、"process "という用語を使っています。プロセスを "スレッド "と呼ぶと、共有メモリを持っているということになります。
アプリケーションは、1つまたは複数のプロセスで構成されています。プロセスとは、最も簡単に言えば、実行中のプログラムのことです。1つまたは複数のスレッドが、プロセスのコンテキストで実行されます。スレッドは、オペレーティングシステムがプロセッサ時間を割り当てる基本単位です。スレッドは、他のスレッドが実行中の部分を含め、プロセスコードの任意の部分を実行することができます。ファイバーは、アプリケーションが手動でスケジュールする必要のある実行単位です。ファイバーは、スケジューリングしたスレッドのコンテキストで実行されます。
ここ]1からの引用です。
スレッドもプロセスも、OSの資源割り当ての原子単位です(つまり、CPU時間をどのように分割するかを記述する同時実行モデルと、他のOS資源を所有するモデルがあります)。の違いがあります。
上のGreg HewgillはErlangの "process "という言葉の意味について正しく、hereではなぜErlangがプロセスを軽量化できるのかについて議論しています。