为什么在同步调用中使用erlang的gen_server:call?

时间:2018-12-04 03:05:29

标签: erlang

我正在调整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可能要花这么长时间吗?

谢谢

埃里克

0 个答案:

没有答案