gpt4 book ai didi

performance - 优化 Erlang 进程的性能

转载 作者:行者123 更新时间:2023-12-03 09:57:07 27 4
gpt4 key购买 nike

在我在这里构建的测试中,我的目标是创建一个解析器。因此,我构建了一个概念证明,可以从文件中读取所有消息,并将所有消息推送到内存后,我将生成一个进程来解析每条消息。在那之前,一切都很好,我得到了一些不错的结果。但是我可以看到 erlang VM 并没有使用我所有的处理器能力(我有一个四核),实际上它在进行测试时使用了大约 25% 的处理器。我使用使用四个线程的 c++ 进行了反测试,显然它使用了 100% 从而产生了更好的结果(我尊重 erlang 使用的相同队列模型)。

所以我想知道什么可能会“减慢”我的 erlang 测试?我知道这不是序列化问题,因为我为每条消息生成一个进程。我想到的一件事是,我的消息可能太小(每个大约 10k),因此制作这么多流程无助于实现出色的性能。

关于测试的一些事实:

106k 条消息在 erlang 上(使用 25% 的处理器功率) - 204 毫秒在我的 C++ 测试中(使用了 100% 的处理器能力) - 80 毫秒

是的,差别不是很大,但如果有更多的可用功率,肯定还有更大的改进空间,对吧?

啊,我已经进行了一些分析,但无法找到另一种优化方法,因为函数调用很少,而且大多数都是字符串到对象的转换。

更新:

哇哦!按照 Hassan Syed 的想法,我已经成功实现了 35 毫秒,而 c++ 为 80 毫秒!这太棒了!

最佳答案

您的 erlang 虚拟机似乎只使用一个内核。

尝试这样开始:

erl -smp enable +S 4

-smp 启用标志告诉 Erlang 启动运行时系统并启用 SMP 支持使用 +S 4,您可以启动 4 个 Erlang 调度程序(每个内核 1 个)

您可以在启动 shell 时查看是否启用了 SMP:

Erlang R13B01 (erts-5.7.2) [source] [64-bit] [smp:2:2] [rq:2] [async-threads:0] [kernel-poll:false]

Eshell V5.7.2 (abort with ^G)
1>

[smp:2:2] 告诉它正在运行 smp 启用 2 个调度程序 2 个在线调度程序

关于performance - 优化 Erlang 进程的性能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1996524/

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