Elixir GenServer 并行 handle_call
Elixir GenServer parallel handle_call
Phoenix Framework上有一个应用。
需要GenServer,它会检查一些值。
这些值的验证是从控制器开始的(请求来自客户端,GenServer 值检查,客户端收到响应)。
一旦 handle_call 是同步的,那么当 10 个客户端同时调用 10 个 handle_call 时会发生什么情况?所有 10 个调用将并行处理还是按队列顺序处理?
GenServer 将仅处理单个调用,其他消息将在邮箱中排队。如果需要同步进程,您可以允许这样做,但您必须考虑邮箱,它可能会在较重的负载下很快堆积起来,并可能在没有任何警告的情况下终止 VM。
您考虑过改用 Task 吗?
Phoenix Framework上有一个应用。
需要GenServer,它会检查一些值。
这些值的验证是从控制器开始的(请求来自客户端,GenServer 值检查,客户端收到响应)。
一旦 handle_call 是同步的,那么当 10 个客户端同时调用 10 个 handle_call 时会发生什么情况?所有 10 个调用将并行处理还是按队列顺序处理?
GenServer 将仅处理单个调用,其他消息将在邮箱中排队。如果需要同步进程,您可以允许这样做,但您必须考虑邮箱,它可能会在较重的负载下很快堆积起来,并可能在没有任何警告的情况下终止 VM。
您考虑过改用 Task 吗?