对我来说,它们似乎是一回事,只是注册的过程被术语“演员”伪装了。
更新:
从那以后,我看到了我思维方式的错误。我想因为我是 Erlang 的新手,所以我在根本不属于他们的地方使用了演员(在某个地方是否有一个反模式名称?)
我经常看到使用进程注册来简化示例代码的示例(通过避免另一个函数参数)。这样做的结果是新手倾向于大量使用进程注册(猴子看,猴子做)。
他们(新手)倾向于将注册更改为正常操作的一部分。他们倾向于构造原子来注册,并让其他进程构造原子来查找进程。当您这样做时,您将拥有共享状态并发(有限,但仍然很糟糕)。
注册表应该用于(好吧,这些是我自己关于何时使用它们的规则):
注册的名称应该有一个前缀(通常是应用程序名称),并且长时间运行的应用程序应该在 OTP.app
文件中。
已注册的进程是进程 id (Pid) 的全局标识符,它本身就是一种处理进程的全局方式(只是事先未知)。
但是,说使用全局标识符与全局变量相同,这将问题混为一谈。类似于说“URI 是全局变量”。在范围、可变性、封装和数据隔离方面存在根本差异,这使得它们真正不同。
请注意,actor 模型是关于并发计算的一般概念。Erlang 进程只是实现角色模型的众多潜在方法之一。Scala、E、Axum 和许多其他语言都支持使用 actor 进行编程,但实现方式却大不相同。