Erlang ETS表事件

时间:2016-02-21 22:50:35

标签: erlang blocking mnesia ets

如果我想将其用于共享状态,是否存在等待插入ETS表的既定机制?

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

3 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

ETS没有事件概念。

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

答案 2 :(得分:1)

ets中没有事件处理。它是非常低级的语言功能,由您自己制作一个包装器。顺便说一下,这是在mnesia中完成的。因此,您可以将共享状态包装到模块中,然后进行订阅并自行发送。