3

如果我想将它用于共享状态,是否有任何已建立的机制来等待插入 ETS 表?

我知道 mnesia 支持表事件,我在想一个类似的机制对于普通的 ETS 很有用,这样一个进程可以等到它需要的数据被加载。我认为这样做的唯一方法是旋转循环并不断请求给定的密钥,直到它到达,但这似乎非常低效。我宁愿得到一个消息回调。如果我在我的和 ETS 之间插入一个流程,我只是将问题推到了底线。

4

3 回答 3

3

最简单的解决方法是启动一个gen_server进程并通过它代理所有插入请求。然后,您可以通过将回调保持在gen_server状态中来注册回调,并在插入的键与模式匹配时调用它们。它甚至可以在单独的应用程序中运行,以允许专门的主管。

于 2016-02-22T10:23:12.480 回答
1

ETS 没有事件的概念。

但是,您可以通过将读取器进程放入“接收”子句来实现您所描述的内容,然后在加载数据后让写入器进程向读取器发送消息。

于 2016-02-21T23:32:05.150 回答
1

中没有事件处理ets。它是一种非常低级的语言特性,由你来围绕它进行包装。顺便说一句,这是在mnesia. 所以你可以将你的共享状态包装到一个模块中,然后自己订阅和发送。

于 2016-02-22T11:17:32.140 回答