簡単Elixirシリーズ
~ プロセスを知ろう① ~
この記事は「Elixir Advent Calendar 2022」17日目の記事です
東京にいるけどfukuokaexのYOSUKEです。
簡単 Elixirシリーズでは小ネタをサクッと書いていこう。というコンセプトで作っていきます。
今回は、プロセスについて公式ドキュメントを見ながらサクッと解説していきます。
ちなみに、最初、エージェントについて扱おうと思ったのですが、エージェントを扱う前にプロセスやらないとってことで、詳しくは、公式を見てください。なので、ここでは簡単に概要を知る為の説明にしておきます。
公式で書かれている部分でまず押さえて起きたいのが次の2つです。
1 全てのコードはプロセスの中で実行される。
Elixir では、すべてのコードがプロセス内で実行されます。プロセスは互いに分離され、互いに並行して実行され、メッセージ パッシングを介して通信します。
2 ElixirのプロセスはOSのプロセスとは別の話し。
Elixir のプロセスをオペレーティング システムのプロセスと混同しないでください。
Elixirのプロセスの理解は、Erlangの仮想マシンであるBEAMのプロセスを知る事から始めましょう。
ようするに、OSのプロセスではなく、VM側(BEAM)のプロセスです。
そして、BEAMのプロセスは、コードの実行が行われる分離されたエンティティです。
この事から、Elixirのプロセスとは、データを保存して操作する単なるメモリの範囲みたいなものです。
ようするに、Elixirのプロセスは、次の特徴を持つ組み込みメモリとも言えます。
- スタック領域を持っていて、ローカル変数を保持します。
- ヒープ領域を持っていて、構造体などを保持します。
- メールボックスを持っていて、他のプロセスからの送信されたメッセージを保持します。
- プロセス制御の状態を保持します。
このプロセスには状態が存在するので、どのようなライフサイクルがあるのかを見てみます。
- プロセスの作成
- プロセス内のコードの実行
- プロセスの終了
状態を持っているので、このプロセスの状態が生きてるか終了してるかを把握する事ができる関数があります。
また、プロセスを生成する為の関数もあります。プロセスに関する便利な機能は Process モジュールにまとめられています。
プロセスの概要の説明はこれくらいにして、例文を通してもう少しみていきたいと思います。が、それは長くなるので
第2段にまとめていきたいと思います。