我是Elixir的新手,目前正在学习过程。在实践中,我编写了一个ping pong程序,该程序从2个进程中打印“ ping”和“ pong”。收到1或2条消息后,进程总是死机。这是我的代码
defmodule Pingpong do
def play do
receive do
{sender, :ping} ->
IO.puts "ping"
send sender, {self, :pong}
play
{sender, :pong} ->
IO.puts "pong"
send sender, {self, :ping}
play
end
end
def start() do
a = spawn(Pingpong, :play, [])
b = spawn(Pingpong, :play, [])
send a, {b, :ping}
end
end
有时我只有一行输出
$ elixir -r pingpong.exs -e "Pingpong.start"
> ping
或多行,然后停止
ping
pong
ping
pong
ping
pong
但是我认为它应该连续打印输出,直到我停止程序为止。上面的代码可能会出什么问题?
这是因为Erlang VM在执行后退出,Pingpong.start
因为主进程没有任何要执行的代码。如果添加:timer.sleep(:infinity)
,以确保主进程不退出,你应该看到ping
并pong
正在不断印永远:
$ elixir -r pingpong.exs -e "Pingpong.start; :timer.sleep(:infinity)"
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句