联系erlang中未注册进程的智能方式



假设您想要用100个表示狗的未注册gen_fsm填充erlang节点。每只狗都可以四处移动,并且必须能够前进到其当前位置的某个中心过程。其他进程(例如捕狗器)应该询问中心进程是否有狗在他附近。

现在的问题是:在中央进程的状态下存储形式为{Pid, {X,Y}}的元组列表是一个好的解决方案吗?如果是这样,唯一的中心流程会成为瓶颈吗?

要获得灵活流程注册表的现成健壮解决方案,请查看gproc

在自动调度大量客户端和服务器时,我也遇到过类似的问题。1.1.也许proecess group pg2模块可以提供一些帮助,它包含以下功能:

get_closest_pid(Name) -> pid() | {error, Reason}
get_members(Name) -> [pid()] | {error, {no_such_group, Name}}

1.2.也许你可以把整个空间划分成更小的区域,每个区域都有可接受的大小,只有区域领导者才包含信息。

在应用程序中充当Central Man的任何进程都会带来瓶颈。每当我遇到这样的场景时,我都会涉及到ETS Tables。首先考虑这个问题及其答案。通常,这种存储将允许对Erlang应用程序中的数据结构进行适当和稳健的访问。如果没有ETS Tables,您的应用程序可能不会超出存储Pid的List、Array或sete.t.c.的特定长度

此外,中央进程可能会死亡,整个状态也会丢失。ETS表提供了一种处理表所有者崩溃时情况的方法,该表实际上可以移交给范围内的另一个进程。应用程序过程中的列表或数组的长度或大小可能会增加,搜索、查找和/或从中删除可能会非常消耗内存。把自己从压力中拯救出来,看看ETS Tables,以及所有与它们有关的东西,你会在几分钟内(或几个小时内,根据任务的复杂性)跟上进度。

最新更新