在线文档教程
Erlang 20

2. Erlang中的通信 | 2. Communication in Erlang

2.Erlang的通信

Erlang中的通信是使用异步信号在概念上执行的。所有不同的执行实体(例如进程和端口)通过异步信号进行通信。最常用的信号是一条消息。其他常见信号有退出,链接,取消链接,监视和监视信号。

2.1信号传递

信号之间传递的时间量被发送,并且信号到达目的地时未指定,但为正值。如果接收器已经终止,信号不会到达,但它可以触发另一个信号。例如,发送到不存在进程的链接信号触发退出信号,该信号被发回到链接信号源自的地方。通过分配进行通信时,如果分销渠道出现故障,信号可能会丢失。

给出的唯一信号排序保证如下:如果一个实体发送多个信号到同一个目标实体,则该顺序被保留; 即,如果A发送一个信号S1B,后来发送信号S2BS1保证不会在S2之后到达。

2.2同步通信

一些通信是同步的。如果分解成小块,同步通信操作由两个异步信号组成: 一个请求信号和一个应答信号。这种同步通信的一个例子是erlang:process_info/2当第一个参数不是self()时。调用者发送异步​​信号请求信息,然后等待包含所请求的信息的应答信号。当请求信号到达目的地时,目的地进程回复所请求的信息。

2.3执行

虚拟机中不同异步信号的实现可以随时间而变化,但是行为总是遵循如上所述的在实体之间传递异步信号的这种概念。

通过检查实现,您可能会注意到某些特定信号提供了比上述更严格的保证。Erlang代码使用这种关于实现的知识是非常重要的,因为实现可以在没有预先通知的情况下随时更改。

主要实施变化的例子:

  • 从ERTS 5.5.2开始,对进程的退出信号是真正异步传送的。

  • 从ERTS 5.10开始,从进程到端口的所有信号都是真正异步传送的。