3

对我来说,它们似乎是一回事,只是注册的过程被术语“演员”伪装了。

更新:

从那以后,我看到了我思维方式的错误。我想因为我是 Erlang 的新手,所以我在根本不属于他们的地方使用了演员(在某个地方是否有一个反模式名称?)

4

2 回答 2

7

我经常看到使用进程注册来简化示例代码的示例(通过避免另一个函数参数)。这样做的结果是新手倾向于大量使用进程注册(猴子看,猴子做)。

他们(新手)倾向于将注册更改为正常操作的一部分。他们倾向于构造原子来注册,并让其他进程构造原子来查找进程。当您这样做时,您将拥有共享状态并发(有限,但仍然很糟糕)。

注册表应该用于(好吧,这些是我自己关于何时使用它们的规则):

  • 长期服务。然后,它与您提到诸如光速之类的常数时一样多的全局状态。
  • 注册进程以帮助调试正在运行的系统,但这些名称不应该被代码引用,只能由 shell 中的人引用

注册的名称应该有一个前缀(通常是应用程序名称),并且长时间运行的应用程序应该在 OTP.app文件中。

于 2010-02-23T14:57:34.683 回答
5

已注册的进程进程 id (Pid) 的全局标识符,它本身就是一种处理进程的全局方式(只是事先未知)。

但是,说使用全局标识符与全局变量相同,这将问题混为一谈。类似于说“URI 是全局变量”。在范围、可变性、封装和数据隔离方面存在根本差异,这使得它们真正不同。

请注意,actor 模型是关于并发计算的一般概念。Erlang 进程只是实现角色模型的众多潜在方法之一。Scala、E、Axum 和许多其他语言都支持使用 actor 进行编程,但实现方式却大不相同。

于 2010-02-22T19:49:54.880 回答