匿名 `gen_server` 实例?
Anonymous `gen_server` instance?
根据实际文档,gen_server:start_link
具有以下签名:
ServerName = {local,Name} | {global,GlobalName} | {via,Module,ViaName}
Name = atom()
..但是如果我不想为某些 gen_server
实例分配不同的名称(既不是 local
也不是 global
),而是想记住它是 PID
并以这种 匿名 方式引用它?我能实现这样的行为吗?
P.S。为什么我需要这个?有一个参数,我们称它为N
,它定义了需要多少个相同的gen_server
实例。当前的实现执行类似 instance_1
..instance_N
的操作,动态生成这些原子,但实际上 PID 在这里就足够了。这就是为什么我想摆脱原子并更喜欢 PID。
ServerName参数用于注册,所以可以通过名称来引用服务器。但是这个参数是可选的,存在 start_link
没有它的版本:
start_link(Module, Args, Options) -> Result
start_link(ServerName, Module, Args, Options) -> Result
三参数版本启动的服务器未注册。当人们更喜欢使用其他方式而不是原子来引用服务器时,这很有用,例如,当使用多个相同类型的服务器时。
根据实际文档,gen_server:start_link
具有以下签名:
ServerName = {local,Name} | {global,GlobalName} | {via,Module,ViaName}
Name = atom()
..但是如果我不想为某些 gen_server
实例分配不同的名称(既不是 local
也不是 global
),而是想记住它是 PID
并以这种 匿名 方式引用它?我能实现这样的行为吗?
P.S。为什么我需要这个?有一个参数,我们称它为N
,它定义了需要多少个相同的gen_server
实例。当前的实现执行类似 instance_1
..instance_N
的操作,动态生成这些原子,但实际上 PID 在这里就足够了。这就是为什么我想摆脱原子并更喜欢 PID。
ServerName参数用于注册,所以可以通过名称来引用服务器。但是这个参数是可选的,存在 start_link
没有它的版本:
start_link(Module, Args, Options) -> Result
start_link(ServerName, Module, Args, Options) -> Result
三参数版本启动的服务器未注册。当人们更喜欢使用其他方式而不是原子来引用服务器时,这很有用,例如,当使用多个相同类型的服务器时。