seb*_*now 1 erlang elixir gen-server
在阅读GenServer和Agent的文档时,我想知道哪些Agent解决方案无法解决用例GenServer?所以,当喜欢Agent了GenServer?
我知道您自己的代理中定义的功能会在代理进程本身上执行,因此可以肯定这是一个很大的区别。
在阅读GenServer和Agent的文档时,我想知道Agent解决GenServer无法解决的用例是什么?
没有一个GenServer 不能实现,因为它Agent是在之上实现的GenServer(并且很简单,只需查看源代码)。
那么,何时选择Agent而不是GenServer?
当特殊情况实施时Agent就足够了。例如:没有异步回复,在调用和强制转换之间没有区别,等等。
我知道您自己的代理中定义的功能会在代理进程本身上执行
它不是“在您自己的代理中定义”的函数,而是那些作为参数传递给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
Run Code Online (Sandbox Code Playgroud)