如果我想将其用于共享状态,是否有任何既定的机制来等待插入 ETS 表?
我知道 mnesia 支持表事件,我认为类似的机制对于普通 ETS 很有用,这样进程就可以等到加载所需的数据。我认为做到这一点的唯一方法是旋转循环并不断请求给定的密钥,直到它到达,但这似乎效率很低。我宁愿收到消息回调。如果我在我的和 ETS 之间插入一个流程,我只是把问题推到了下线。
解决方法是启动一个gen_server
进程并通过它代理所有插入请求。然后,您可以通过将回调保持在gen_server
状态来注册回调,并在插入的键与模式匹配时调用它们。它甚至可以在单独的应用程序中运行,以允许专门的主管。
ETS没有事件的概念。
但是,您可以通过将读取器进程放入"接收"子句中来实现所描述的内容,然后让编写器进程在加载数据后向读取器发送消息。
ets
中没有事件处理。这是相当低级的语言功能,由您围绕它进行包装。顺便说一句,这是在mnesia
中完成的方式.因此,您可以将共享状态包装到模块中,然后自己进行订阅和发送。