【问题标题】:Elixir GenServer parallel handle_callElixir GenServer 并行句柄调用
【发布时间】:2018-01-13 13:20:29
【问题描述】:

Phoenix 框架上有一个应用程序。

需要 GenServer,它会检查一些值。

这些值的验证从控制器开始(请求来自客户端,GenServer 值检查,客户端收到响应)。

一旦handle_call是同步的,那么当10个客户端同时调用10个handle_call时会发生什么?所有 10 个调用将并行处理还是按队列顺序处理?

【问题讨论】:

    标签: elixir gen-server


    【解决方案1】:

    GenServer 将只处理单个呼叫,其他消息将在邮箱中排队。如果需要同步进程,您可以允许这样做,但您必须考虑邮箱,它可能会在较重的负载下很快堆积起来,并可能在没有任何警告的情况下杀死 VM。

    您是否考虑使用 Task 代替?

    【讨论】:

    • 谢谢。所以使用 GenServer 对于这个任务来说是个坏主意。问题是我需要对第三方 API 进行多次调用,并将结果处理并返回给客户端。显然,我需要使用 Task,或者直接在客户端的请求处理线程中进行这些调用
    • 嗯,以下是可以指导您决定何时使用它们的方法。如果你的任务很短(只有一个调用然后响应然后使用任务)但是当它是一些长时间运行的过程时,你绝对应该使用 GenServer 并围绕它构建监督树。但是你需要想想你真的需要同步调用吗?消费者可以订阅频道或每 5 秒尝试使用一些“相关 id”获取结果
    猜你喜欢
    • 2021-03-03
    • 2014-09-07
    • 2018-12-14
    • 2019-03-27
    • 2019-12-17
    • 2017-10-16
    • 1970-01-01
    • 2016-03-14
    • 2017-02-17
    相关资源
    最近更新 更多