Ope*_*ned 5 erlang process message-passing
我知道您可以使用以下内容执行简单的消息传递:
self() ! hello.
Run Code Online (Sandbox Code Playgroud)
您可以通过调用查看消息:
冲洗()。
我还可以在函数中创建简单的进程,例如:
spawn(module, function, args).
Run Code Online (Sandbox Code Playgroud)
但是我不清楚如何在不注册 Pid 的情况下向进程发送消息。
我已经看到一些示例,表明您可以在 shell 中对它进行模式匹配以获取分配给 var 的 Pid,因此如果我创建一个 gen_server,例如:
...
start_link() ->
gen_server:start_link(?MODULE, init, []).
init(Pid) ->
{ok, Pid}.
...
Run Code Online (Sandbox Code Playgroud)
然后我可以在 shell 中使用以下命令调用它:
{ok, Pid} = test_sup:start_link().
{ok,<0.143.0>}
> Pid ! test.
test
Run Code Online (Sandbox Code Playgroud)
所以我的问题是,您能否以 <0.0.0> 的形式向 Pids 发送消息,而无需将它们注册到 shell 中的原子或变量?实验和搜索被证明是徒劳的......
如果您碰巧需要根据 Pid 的文本表示向 Pid 发送消息,您可以这样做(假设字符串为“<0.42.0>”):
list_to_pid("<0.42.0>") ! Message
Run Code Online (Sandbox Code Playgroud)
这几乎只在 shell 中有用(您可以在其中查看日志消息的输出或从 Observer 等监控数据);任何产生的进程通常应该是它所链接(或监视)的某种形式的父进程的子进程。
至于将消息发送到你刚才催生,spawn返回一个PID控制,这样你就可以直接为它分配给一个变量(这是不一样对其进行注册):
Pid = spawn(M, F, A),
Pid ! Message.
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
949 次 |
| 最近记录: |