天天看点

elixir 高可用系列(一) Agent概述使用方法总结

elixir 本身是一种 immutable 的语言,默认情况下,进程间是不共享任何状态的,进程之间通过消息来交互。

而 Agent 则封装了一种进程间共享状态的方式,通过这种方式,不用显式的写 send/receieve 的代码,就能方便的在进程之间共享状态。

首先,看一个在不用 Agent 的情况下,如何获取进程状态的例子。

测试 WithoutAgent 的使用:

从上面的使用可以看出,为了使用 WithoutAgent 中的状态(一个 map),外部还必须要自己管理 WithoutAgent 的返回的状态 m,

通过 WithoutAgent 来改变状态时,每次都要将当前状态 m 作为一个参数传给 WithoutAgent。

只有一个进程使用 WithoutAgent 时,上述方式没有什么问题,当有多个进程使用 WithoutAgent,每个进程持有的状态 m 很难保持一致。

使用 Agent 来重新实现上面的例子:

测试 WithAgent 的使用:

从上面的使用中可以看出,使用了 Agent 之后,使用方完全不用自己管理 WithAgent 的状态,只要操作状态即可。

这样,多个进程同时使用 WithAgent 时,也不用管状态冲突的事情,状态如果有冲突也是在 WithAgent 中自己管理。

总的来说,Agent 就是状态的简单的封装,方便进程间状态的共享。

本文转自wang_yb博客园博客,原文链接:http://www.cnblogs.com/wang_yb/p/5422683.html,如需转载请自行联系原作者