何时在 Elixir 中使用 Agent 而不是 GenServer

When to use Agent instead of GenServer in Elixir

在阅读 GenServer and Agent 的文档时,我想知道 Agent 解决了 GenServer 不能解决的用例是什么?那么,什么时候更喜欢 Agent 而不是 GenServer

我知道在您自己的代理中定义的函数会在代理进程本身上执行,所以这肯定有很大的不同。

While reading the documentation of both GenServer and Agent I wondered what are the Use Cases the Agent solves that GenServer cannot?

None 而 GenServer 不能 ,因为 Agent 是在 GenServer 之上实现的(很简单,只是看看 the source)。

So, when to prefer Agent over GenServer?

Agent实现的特殊情况就足够了。例如:没有异步回复,不区分调用和转换等

I know that functions defined in your own agents get executed on the agent process itself

它不是函数 "defined in your own agents",而是那些作为参数传递给 Agent.get/update/etc.

的函数

文档中的示例:

# Compute in the agent/server
def get_something(agent) do
  Agent.get(agent, fn state -> do_something_expensive(state) end)
end

# Compute in the agent/client
def get_something(agent) do
  Agent.get(agent, & &1) |> do_something_expensive()
end