4

我正在构建一个 OTP 应用程序,该应用程序遵循类似于trapexit上描述的模式,其中我实现了一个非阻塞 gen_servergen_server:call/3用于启动与后端的事务并将事务 id 的映射存储到Frompid。当 gen_server 收到来自后端的消息时,它会提取事务 id 并使用此映射来查找正确的 pid,然后将消息转发到该 pid。

在 trapexit 示例中,此映射是使用 ets 实现的,但是我发现让 gen_server 的状态包含具有这些映射的 dict 是一个非常自然的解决方案。

对于我的特定用例,映射最多包含 200 个条目。

推荐哪种实施方式?

提前致谢!

4

2 回答 2

2

与 ets 相比,200 足以对性能产生一些影响(可能是一个数量级或更少)。您必须问自己的真正问题是“我需要这种额外的性能还是就足够了?”。

如果性能不是问题,请使用 dict.

于 2013-06-06T00:52:41.540 回答
0

The functional approach is to keep your private data in state. One practical consideration against having very large state data (which yours does not appear to be) however is that it will get dumped in a crash log.

于 2013-06-06T12:01:34.820 回答