🎉
軽量プロセスとPhoenix LiveView
動画
2024年5月17日(木曜日)に東京浜松町・大門で開催されたElixir/Phoenix入門セミナー(daimon.ex)での発表です。
スライド
LinuxのプロセスとElixirの軽量プロセス
- プログラミング言語Elixirで書かれたプログラムが起動されると、それは仮想マシンBEAMの中で動く。
- 仮想マシンBEAM自体は、Linuxのプロセスである。
- Elixirの軽量プロセスは、仮想マシンBEAM(=Linuxプロセス)の内部で生まれる。
- 軽量プロセスは、生成にかかる時間が短く、メモリの使用量が少ない。
メッセージパッシング
- 軽量プロセスは受信箱を持ち、互いの受信箱に向けてメッセージを送り合うことができる(メッセージパッシング)。
- 軽量プロセスは受信箱に届いたメッセージを順に処理していく。
- メッセージの処理は逐次処理。先に届いたものの処理が終わるまで、次には進まない。排他制御が不要。
LiveViewは軽量プロセスである
- LiveViewを用いたPhoenixアプリケーションでは、ブラウザ側のLiveSocketオブジェクトとサーバー側のLiveView(軽量プロセス)がWebSocketで接続する。
- ブラウザの数と同じ数のLiveViewが作られる。
- LiveSocketオブジェクトはJavaScriptのオブジェクト。
- 両者はWebSocketで接続しているので、常にどちらの方向に対してもメッセージを送信できる。
LiveViewソケットはアプリケーションの「状態」を持つ
- 個々のLiveView(軽量プロセス)は、内部に「LiveViewソケット」を持つ。
- LiveViewソケットはアプリケーションの「状態」を保持する。
- アプリケーションの「状態」からブラウザの画面を描画するためのHTML文書を生成できる。
LiveViewとReact
- 状態を保持する場所が異なる: LiveViewはサーバー側、Reactはブラウザ側
- データを同期する方法が異なる: LiveViewはプッシュ型、Reactはプル型
Discussion