您的位置:首页 > 其它

erlang中pg2模块使用

2011-10-13 09:22 197 查看
pg2这个模块实现了进程组的功能。这个模块之前有个模块为pg,pg模块的进行组中消息将被发送到组内的每个进程,但是pg2却不同,它可以选择性地将消息发送给单个、某些或全部组内成员。通过进程组的名称可以访问组内的进程,例如进程组的名称为foobar,而且有一系列进程位于组内,可能这些进程位于不同的节点上,都可以成为foobar的成员。不能够直接向foobar发送消息,但是通过方法get_members/1 和 get_local_members/1获取的组内的进程,然后可以与查出的进程通信。

下面是一些示例:

%%通常pg2服务器不需要明确显示的启动的,而是在需要的时候动态的启动,

%%例如你调用pg2:create是pg2服务已经启动,如果要显示的启动,调用

1> pg2:start().

{ok,<0.34.0>}



2> pg2:start_link().

{error,{already_started,<0.34.0>}}

%%创建名字为group1的进程组

3> pg2:create(group1).

ok

%%查看所有可见的组

pg2:which_groups().

4> pg2:which_groups().

[group1,group2]

%%同一个进程可以多次加入到组中,如果需要将一个进程加入到一个组中,如下

15> pg2:join(group1,self()).

ok

16> pg2:join(group1,self()).

ok

17> self().

<0.48.0>

18> pg2:get_members(group1).

[<0.48.0>,<0.48.0>]

19> pg2:leave(group1,self()).

ok

20> pg2:get_members(group1).

[<0.48.0>]

%%获取本节点内位于组内的进程

21> pg2:get_local_members(group1).

[<0.48.0>]

%%从进程组中,随机获取一个进程

22> pg2:get_closest_pid(group1).

<0.48.0>

%%删除进程组

23> pg2:delete(g1).

ok
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: