spawn
利用上一篇提到的 spawn 跟 send,可以做以下这个简单的范例,我们用Test.sum运行了一个行程,其中receive可以接收其他行程传来的讯息,利用尾递回的特性,直接不断呼叫 sum ,便可以一直进行监听,且不会造成记忆体爆炸。
用 pid 记录了行程的 id,再用 send 函式来传递讯息给行程,这样便完成了最简单的行程间的沟通了。
iex> defmodule Test do
...> def sum do
...> receive do
...> [a, b] -> IO.inspect(a + b)
...> end
...> sum
...> end
...> end
{:module, Test,
<<70, 79, 82, 49, 0, 0, 4, 228, 66, 69, 65, 77, 65, 116, 85, 56, 0, 0, 0, 142,
0, 0, 0, 16, 11, 69, 108, 105, 120, 105, 114, 46, 84, 101, 115, 116, 8, 95,
95, 105, 110, 102, 111, 95, 95, 7, 99, ...>>, {:sum, 0}}
iex> pid = spawn(Test, :sum, [])
#PID<0.417.0>
iex> send pid, [3, 6]
9
[3, 6]
在 Elixir 中,最为人所知的应该是她在并行化处理方面的优化了,因此使用Process进行平行处理,在许多高处理量跟高延迟的工作下,应该可以取得不错的效果吧,因为 Elixir 的 Process 不会造成堵塞,意味着就算某个行程卡住或爆掉,其他行程也不会受到影响。
spawn_link
当我们希望知道 Process 程序崩溃时,可以使用 spawn_link 这个函式,来与子程序做连结(意思是可以接收到子行程的崩溃讯息。)
<<: Day [28] Azure 认知服务-Custom Vision 建置
TypeScript 能手养成之旅 Day 1 出发 前言 学习程序满一年了,转职成为工程师也有半年...
前言 Hi, 我是鱼板伯爵这里我们要将Google登入与介面做连接,所以又要使用Bloc了,老样子按...
环境 Windows 10 21H1 ETW 介绍 历史 ETW (Event Tracing fo...
自我介绍後台及前台 自定义性别 我们现在要开始做自我介绍的後台部分, 在这里我们要先建一个Enum,...
接下来我们来谈谈 MVP ( Model-View-Presenter ),在知道 MVC 也只是在...