繁体   English   中英

创建N个与主管共享一个ETS表的孩子

[英]creating N childs that share one ETS table with a supervisor

我创建了一个主管来启动孩子,每个孩子正在创建自己的ETS表的主管。 基本上,一切看起来都不错,除非我要启动50个以上的孩子,否则数据库表太多,这也是一个不好的设计。 我想以这样一种方式来实现:主管创建子项,并且所有子项都使用一个ETS表。 即使孩子想要写入ETS表,它也会写入全局ETS表。

我试图用Google搜索,但找不到任何帮助。

谢谢!

为什么说创建50个ETS表是一个错误的设计? 这完全取决于您的要求。 如果那50个进程需要同时访问ETS,则将它们限制为仅一个表可能会影响性能,因为一次只能将一个进程写入该表。

仅当所有这些进程都需要访问相同的数据时,创建单个表或拥有该表并充当将数据写入该表的网关的gen_server (由Nathaniel提出)才有意义。

但是,在后一种情况下,如果将表ID从管理器传递给其子代,则子代进程可以并行进行读/写,而不是依靠中央gen_server来将请求代理到表(除非如此),否则效率会更高。当然,性能不是您的要求)。

这取决于您实际想要的内容,但是您可以让主管创建表并将pid /名称传递给子代使用。 如果要在进程之间共享表,则需要使表使用公共权限。

或者使服务器负责读取和写入要存储的数据,并让主管与其他孩子一起管理该服务器。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM