我理解一个过程是如何运作的。我了解如何实现OTP行为,如gen-server等。
但是当我选择一种方法而不是另一种方法时,我并不清楚。
例如,Cesarini等。例如,在Erlang编程中,通过生成进程,编写循环函数等来实现p 240上的数据库服务器。编程Erlang中的第196页的Joe Armstrong的聊天客户端也产生了一个进程。
为什么这些不能更好地实现为OTP发电机?是出于教育目的吗?还是有合理的技术原因?
换句话说,什么经验法则会指导我实施一种方法而不是另一种方法?
非常感谢。
答案 0 :(得分:7)
在上面的两个例子中,出于教育目的,简单的衍生过程是首选:这个更容易解释,这些作者不必解释OTP来传达他们想要教授的内容,而且无论如何要了解Erlang中进程的概念。即使在遵循OTP规则的实际应用程序中,并非所有进程都使用OTP行为实现并插入监督树中。
经验法则很简单。 通过查看它带来的内容(代码更改,容错等)或者您是否计划与符合OTP的代码集成来确定您是否要遵循OTP设计原则。如果你想要它带来的任何功能,请遵循OTP原则,并避免重新发明轮子。
如果你坚持OTP原则,因此使用gen_*
行为,你应该为任何短期过程做一个简单的生成,不需要监督或代码升级 。它的寿命不会超过部署版本的时间(否则,无论如何都需要soft_purge
)。所有其他进程必须插入监督树中,并可能实现gen_ *行为。