gpt4 book ai didi

具有大状态的erlang gen_server

转载 作者:行者123 更新时间:2023-12-04 17:57:42 28 4
gpt4 key购买 nike

我有一个包含数千个条目的 trie(用元组和列表实现),我想支持并发读取。数据的内存占用在 10-20 MB 范围内。 trie 构建一次,之后只读。

维护状态并为客户端提供并发访问的推荐方法是什么?

这是我尝试过的:

1) 创建了一个以 trie 为状态的 gen_server。这工作得很好,但很明显,所有的调用都被序列化了。

2) 修改 (1) 为每个调用生成一个新进程,该进程接受状态、请求和 From .每个新进程都会遍历树并调用 gen_server:reply/2结果。该解决方案似乎不起作用,因为内存和 CPU 使用率激增。我认为发生这种情况是因为状态被复制到每次调用的衍生进程中。

最佳答案

mochiweb 的 mochiglobal 正是为这种用例而设计的。基本上,它将获取您的数据结构并将其编译为模块,因此数据是共享的(模块常量的零副本)。仅适用于不经常更改的数据结构,但听起来这就是您所拥有的。

  • https://github.com/mochi/mochiweb/blob/master/src/mochiglobal.erl
  • http://www.erlang.org/pipermail/erlang-questions/2009-March/042503.html
  • 关于具有大状态的erlang gen_server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5130382/

    28 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com