首页 > 解决方案 > 为什么要在同步调用中使用 erlang 的 gen_server:call?

问题描述

我调整了我的 Erlang 项目的性能。我遇到了一个奇怪的情况。因为我想在某些情况下使用 CPU 的全部功率(多核),所以在我的测试中 CPU 使用率将在 100% 左右。

然后我发现了一些奇怪的东西,有一些代码必须同步,所以我gen_server:call用来做这个任务。但是当 CPU 很忙时,gen_server 的实际任务是在很短的时间内完成的(从 ETS 读取一个值)。但我终于得到了一个漫长的过程时间gen_server:call。在我的分析之后,我发现大部分时间都在gen_server:call等待处理(90%+)。就我而言,该任务运行了 3000 次。总任务时间约为 100 毫秒。但调用gen_server:call成本约为 3 秒。

gen_server:call在这种情况下,如果它非常昂贵,我为什么要使用它才能实现 gen_server 行为?看来我直接做任务会更好。

有谁知道为什么gen_server:call可能需要这么长时间?

谢谢,

埃里克

标签: erlang

解决方案


推荐阅读