iT邦幫忙

2024 iThome 鐵人賽

DAY 21
0
Software Development

Elixir 多工 : Processes 與 OTP系列 第 21

21 Name registration

  • 分享至 

  • xImage
  •  

目前用過的很多 start 函式,如 Supervisor.start_link, GenServer.start 等都可以使用 name option 來把 process 註冊在一個 atom 下,這個 name option 裡面使用了 Process.register/2

Process.register/2

register(pid_or_port, name) 函式會將一個 pid 或是 port 註冊綁定在目前這個 node 的一個名字下。

當綁定之後,就可以用該名字來替代 pid 去做 send 之類的 process 呼叫。

Process.register/2 有幾個條件

  • 目標 pid 或是 port 必須在當下 node 且存活
  • name 不能被註冊過 (在上一篇要將 name 拿掉的理由)
  • 目標 pid 或是 port 不能有其他註冊的 name
  • 有幾個保留的 atom 不能使用:nil, false, true, :undefined

使用範例,註冊當下的 iex pid

iex(5)> Process.register(self(), :hi)
true
iex(6)> send(:hi, "可以送訊息")
"可以送訊息"
iex(7)> send(:boom, "沒註冊的 atom 不能")
** (ArgumentError) errors were found at the given arguments:

  * 1st argument: invalid destination

    :erlang.send(:boom, "沒註冊的 atom 不能")
    iex:7: (file)


上一篇
20 DynamicSupervisor
下一篇
22 name: {:via, module, term}
系列文
Elixir 多工 : Processes 與 OTP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言