Elixir 并发编程:进程通信与状态服务器实践
1. 进程通信基础
在并发编程中,简单的“即发即忘”式并发执行有时就足够了,即调用者进程不接收派生进程的任何通知。但有时,你会希望将并发操作的结果返回给调用者进程,这时可以使用消息传递机制。
在复杂系统中,并发任务往往需要以某种方式进行协作。例如,主进程派生多个并发计算任务,然后在主进程中处理所有结果。由于进程是完全隔离的,它们不能使用共享数据结构来交换信息,而是通过消息进行通信。
消息传递的工作方式如下:
- 当进程 A 希望进程 B 执行某项任务时,它会向 B 发送异步消息。消息内容是一个 Elixir 项,即可以存储在变量中的任何内容。发送消息相当于将其存储到接收者的邮箱中。
- 调用者进程继续执行自己的任务,而接收者可以在任何时候提取消息并进行处理。由于进程不能共享内存,消息在发送时会被深度复制。
进程邮箱是一个先进先出(FIFO)队列,仅受可用内存的限制。接收者按接收顺序处理消息,只有在消息被处理后才能从队列中移除。
要向进程发送消息,需要获取其进程标识符(PID)。新创建进程的 PID 是 spawn/1 函数的返回值,也可以通过调用自动导入的 self/0 函数获取当前进程的 PID。
发送消息使用 Kernel.send/2 函数:
send(pid, {:an, :arbitrary, :term})
接收消息使用
超级会员免费看
订阅专栏 解锁全文
44

被折叠的 条评论
为什么被折叠?



