pg2
pg2
模块
pg2
模块摘要
分布式命名进程组。
描述
该模块实现了进程组。每条消息都可以发送给一个、一些或所有组成员。
一组进程可以用一个通用名称来访问。例如,如果有一个名为的组foobar
,则可以有一组进程(可以位于不同的节点上),它们都是该组的所有成员foobar
。没有特殊的功能可以将信息发送给组。相反,客户端函数将与函数一起编写,get_members/1
并get_local_members/1
确定哪些进程是组的成员。然后该消息可以发送给一个或多个组成员。
如果成员终止,则自动从组中删除。
警告
该模块disk_log
用于管理分布式磁盘日志。磁盘日志名称用作组名称,这意味着可能需要执行某些操作以避免名称冲突。
数据类型
name() = any()
进程组的名称。
出口
create(Name :: name()) -> ok
创建一个新的空进程组。该组在全部节点上全局可见。如果组存在,则不会发生任何事情。
delete(Name :: name()) -> ok
删除进程组。
get_closest_pid(Name) -> pid() | {error, Reason}
类型
一个有用的调度功能,可以从客户端功能中使用。它在本地节点上返回一个进程,如果这样的进程存在的话。否则,它随机选择一个。
get_local_members(Name) ->
pid() | {error, {no_such_group, Name}}
类型
返回组中本地节点上运行的所有进程Name
。此功能将在访问组的客户端功能中使用。因此它对速度进行了优化。
get_members(Name) -> pid() | {error, {no_such_group, Name}}
类型
返回组中的所有进程Name
。此功能将在访问组的客户端功能中使用。因此它对速度进行了优化。
join(Name, Pid :: pid()) -> ok | {error, {no_such_group, Name}}
类型
将流程加入Pid
到组中Name
。一个进程可以多次加入一个组,并且必须离开该组相同的次数。
leave(Name, Pid :: pid()) -> ok | {error, {no_such_group, Name}}
类型
使流程Pid
离开组织Name
。如果该过程不是该组的成员,则返回ok
。
start() -> {ok, pid()} | {error, any()}
start_link() -> {ok, pid()} | {error, any()}
启动pg2
服务器。通常情况下,服务器不需要明确启动,因为如果需要的话它会动态启动。这在开发过程中很有用,但在目标系统中,服务器将明确启动。kernel(6)
为此使用配置参数。
which_groups() -> [Name :: name()]
返回所有已知组的列表。
另见
kernel(6)