まず始めに大事なことがあります。それは「Erlangのプロセスは、オペレーティングシステム(OS)のプロセスとは仕組みが異なる」ということです。
この二つの違いを説明するためにはOSの知識が必要なので軽くまとめてみます。
OSのプロセスやスレッドについては、そこそこ厚みのある書籍には必ず記載してあるので、詳細なことを学びたい型はそちらを確認下さい。
プロセスは動作中のプログラムのことです。 初期のOSにおいてはプロセスは一つしか扱えませんでした。 これは、ある処理をしている最中は別の処理を同時に扱えないことを意味しています。
時代が進み、OSは複数のプロセスを扱えるようになります。 つまり、ある作業をやっている裏側で別の作業をやらせることが可能になったということです。
しかし、よく考えてみて下さい。
みなさんが普通に使っているPCに、CPUはいくつ積まれているでしょうか?
普通は一つですよね。
プログラムを動かすCPUが一つしかないのに、2つ以上のプログラムが動くのは何故なのでしょうか。
OSがプロセスを並列に実行する方法
人間が分からないほどの細かい単位でCPUを一つのプロセスに割り当てる。
プロセスが終了、もしくは決められた時間が来たら別のプロセスにCPUを譲り渡す。
その際に、プログラムを格納するメモリーや、
レジスタの中に入っている値を新しいプロセスのものに切り替える。
これは現在のプロセスの状態の保存と、新しいプロセスの状態の読み込みを伴うため
非常にオーバーヘッドの高いものである。
ようは非常に重たい処理だっていうことですね。
実はOSにおいての並列処理の単位はプロセスだけでなく、その下のスレッドというものも存在します。 一つのプロセスの中での並列処理の実行単位がスレッドなのです。
スレッド
一つのプロセスの中で並列処理されるプログラム。
細かい時間に区切ってCPUを順番に使うが、プロセスと違って
コンテキストスイッチ(メモリの中身の入れ替え)を伴わないため高速である。
スレッド同士は同じプロセス内の処理なのでメモリを共有する。
ErlangのプロセスはOSのプロセスとは異なります。
また、スレッドとも異なるものです。
その特徴は
Erlangのプロセス
プロセス同士の交代はOSではなく、Erlangのランタイムで実行されるため、
コンテキストスイッチを伴わない。
プロセス同士はメモリを共有しないで、完全に独立している。
プロセスの交代は非常に高速である。
プロセス同士の連絡は非常に高速に行なわれる。
Erlangの大きな特徴は、このプロセスにあると言えます。
逆に言えば、このプロセスの特徴をシステムに行かせそうな場合に、
Erlangで開発を行なうメリットがあると言えるでしょう。
Erlangのプロセスはは他のプログラミング言語のマルチスレッドよりも非常に高速で、 なおかつ使いやすいものとなっています。