[Elixir]GenServer/Agent/Taskの起動元

ElixirにはGenServer、Agent、Taskといったモジュールが存在します。これらは状態の保持やプロセスの起動などに特化したもの、汎用的なものといった役割の区分があります。

ちょっと、それらがどのように起動(start/start_link)されているのかちょっと見てみようと思ったので、そのメモです。

GenServer

コード(Elixir 1.0.5)

Task

Taskは、 start_link すると、 Supevisorの :simple_one_for_one のstrategyで Task.Supervised を起動するようです。コード(Elixir 1.0.5)

少し追って Task.Supervised をみると、Erlangの :proc_lib を起動しているようですね。
(Elixir 1.0.5)

proc_libってなんだろう?と思ってみると、Erlangの以下のモジュールのよう。

http://www.erlang.org/doc/man/proc_lib.html

Functions for asynchronous and synchronous start of processes adhering to the OTP design principles.

OTPデザインの原則に従った、同期/非同期のプロセス起動を担うらしいです。

http://shibu.jp/erlang/design_principles/sys_and_proc_lib.html

Agent

Agentは、 GenServer を使っているようです。(Elixir 1.0.5)

ここから、Agent.Servereへ向かっているよう。(Elixir 1.0.5)


なるほどー。send/receiveをElixir独自でごにょごにょしていると思っていたら、基本Erlang/OTPの資産を使っているのですね。

コメントを残す

以下に詳細を記入するか、アイコンをクリックしてログインしてください。

WordPress.com ロゴ

WordPress.com アカウントを使ってコメントしています。 ログアウト / 変更 )

Twitter 画像

Twitter アカウントを使ってコメントしています。 ログアウト / 変更 )

Facebook の写真

Facebook アカウントを使ってコメントしています。 ログアウト / 変更 )

Google+ フォト

Google+ アカウントを使ってコメントしています。 ログアウト / 変更 )

%s と連携中