Erlang 中的注册进程

Erlang 中进程间通信主要依靠向进程传递消息,可以用进程的 Pid 代表进程发送消息

1 Pid ! "some message".

当多个进程需要向某进程发送消息时,一种方法是由该进程的父进程将该进程的进程号作为参数传递给所有需要与该进程通信的进程。 当然,还有一种方法,就是使用注册进程。

注册进程

注册进程指进程在虚拟机中注册一个原子作为进程的代表名字,这个原子就可以代表进程。注册的原子具有全局作用域。

这里的全局作用域指:

  • 若工作在非分布式状态,全局作用域指当前的 Erlang 虚拟机

  • 若工作在分布式状态,全局作用域指当前 Erlang 虚拟机节点

也就是说,注册进程所注册的原子可以在当前 Erlang 虚拟机中全局使用。

使用 erlang:register(atom, Pid) 将进程 Pid 注册到原子 atom,之后就可以把此时原子就可以当作 Pid 那样使用消息发送操作符

1 atom ! "some message".

相关的 BIF

注册 atomPid

1 register(atom, Pid).

取消 atom 的注册

1 unregister(atom).

返回 atom 关联的进程号,如果未关联,返回 undefined

1 whereis(atom).

返回系统中所有已注册的进程名

1 registered().

分布式状态下的注册进程

刚才说到,分布式状态下,注册进程对当前 Erlang 虚拟机节点有效,因此,而跨节点使用则需要添加节点名。

1 {atom, node_name} ! "some messages".

本文作者: zhustec

本文标题: Erlang 中的注册进程

本文链接: https://blog.zhustec.me/posts/register-process-in-erlang

发布时间: 2015-02-07T09:35:08+00:00

版权声明: 本文由 zhustec 原创 采用 CC BY-NC-ND 4.0 许可协议 转载请保留以上声明信息!