iT邦幫忙

2024 iThome 鐵人賽

DAY 20
0

目前我們使用的 Supervisor 開啟時,需指定固定的 children
如果需要動態的增加減少監督的 process ,則需要使用 DynamicSupervisor

因為目前要開啟多個 Bank,要將 Bank 模組 start_link 函式裡的名字拿掉

def start_link(init_balance) do
  IO.puts("啟動中")
  GenServer.start_link(__MODULE__, init_balance)
end

使用普通 Supervisor 啟動一個 DynamicSupervisor ,需指定名字

children = [
  {DynamicSupervisor, name: DynamicBanker, strategy: :one_for_one}
]

Supervisor.start_link(children, strategy: :one_for_one)

替 DynamicBanker 增加 child

{:ok, bank1} = DynamicSupervisor.start_child(DynamicBanker, {NiceBank.Bank, 100})
{:ok, bank2} = DynamicSupervisor.start_child(DynamicBanker, {NiceBank.Bank, 200})

也可以查看 DynamicBanker

iex(6)> DynamicSupervisor.count_children(DynamicBanker)
%{active: 2, workers: 2, supervisors: 0, specs: 2}

上一篇
19 Observer
下一篇
21 Name registration
系列文
Elixir 多工 : Processes 與 OTP30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言