Elixir进程未收到消息

唤醒字节

我是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),以确保主进程不退出,你应该看到pingpong正在不断印永远:

$ elixir -r pingpong.exs -e "Pingpong.start; :timer.sleep(:infinity)"

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章