我最近完成了乔的书,非常喜欢它。从那时起,我开始使用 erlang 编写软实时应用程序,我不得不说我对 gen_server 的使用有点困惑。
我什么时候应该使用 gen_server 而不是简单的无状态模块?我将无状态模块定义如下: - 一个将其状态作为参数的模块(很像 ETS/DETS),而不是将其保留在内部(如 gen_server)
比如说发票管理器类型模块,它应该初始化并返回我随后传递给它的状态吗?SomeState = InvoiceManager:Init(), SomeState = InvoiceManager:AddInvoice(SomeState, AnInvoiceFoo)。
假设我需要发票管理器状态的多个实例(比如我的应用程序管理多个公司,每个公司都有自己的发票),如果他们每个人都有一个带有内部状态的 gen_server 来管理他们的发票,或者更适合简单地拥有无状态模块多于?
两者之间的界线在哪里?
(注意上面的发票管理例子就是这样,一个例子来说明我的问题)