何时在 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
在阅读 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