2016年11月17日木曜日

Elixirで並行プロセス

Elixir並行プロセスです。 Elixirは、並行処理のためにアクターモデルに依存していて、並行プログラムは3つの基本要素から成り立っています。
  1. spawn(生み出す)
  2. send(送信)
  3. receive(受信)
receiveの処理は、何度か繰り返してみると、徐々にわかってきます。
iex(1)> pid = spawn fn -> 1 + 2 end
#PID<0 .123.0="">

iex(2)> Process.alive?(pid)
false

iex(3)> self()
#PID<0 .124.0="">

iex(4)> Process.alive?(self())
true

iex(5)> send self(), {:hello, "world"}
{:hello, "world"}

iex(6)> receive do
...(6)>   {:hello, msg} -> msg
...(6)>   {:world, msg} -> "won't match"
...(6)> end
"world"

iex(7)> receive do
...(7)>   {:hello, msg}  -> msg
...(7)> after
...(7)>   1_000 -> "nothing after 1s"
...(7)> end
"nothing after 1s"

iex(8)> parent = self()
#PID<0 .125.0="">

iex(9)> spawn fn -> send(parent, {:hello, self()}) end
#PID<0 .126.0="">

iex(10)> receive do
...(10)>   {:hello, pid} -> "Got hello from #{inspect pid}"
...(10)> end
"Got hello from #PID<0 .126.0="">"

iex(11)> send self(), :hello
:hello

iex(12)> flush()
:hello
:ok

参考サイト
プロセス - Processes -(Elixir)

0 件のコメント:

コメントを投稿