我了解一个进程是如何工作的。我了解如何实现OTP行为,如gen-server等。但我不清楚我什么时候会选择一种方法而不是另一种。例如,Cesarini等人在《Erlang Programming》一书中,通过生成一个进程、编写一个循环函数等来实现第240页上的数据库服务器。为什么这些不能更好地实现为OTP gen-server?是为了教育目的吗?还是有合理的技术原因?换句话说,什么样的经验法则可以指导我实现一种方法而不是另一种方法?多谢了。
uqjltbpv1#
在上面的两个示例中,出于教育目的,首选简单派生的流程:这解释起来更简单,这些作者不必解释OTP来传达他们想要教导的内容,并且无论如何理解Erlang中的进程的概念是很重要的。即使在遵循OTP规则的真实世界应用中,也不是所有进程都用OTP行为实现并插入到监督树中。经验法则非常简单。通过查看OTP带来的功能(代码更改、容错等)来确定您是否要遵循OTP设计原则,或者您是否计划集成OTP兼容代码。如果您想要OTP带来的任何功能,请务必遵循OTP原则,避免重复劳动。如果你坚持OTP原则,并因此使用gen_*行为,你应该为任何不需要监督或代码升级的短期进程做一个简单的衍生。它不应该比部署一个发布版本的时间更长(否则,你无论如何都需要soft_purge)。所有其他进程必须插入到监督树中,并可能实现一个gen_* 行为。
gen_*
soft_purge
1条答案
按热度按时间uqjltbpv1#
在上面的两个示例中,出于教育目的,首选简单派生的流程:这解释起来更简单,这些作者不必解释OTP来传达他们想要教导的内容,并且无论如何理解Erlang中的进程的概念是很重要的。即使在遵循OTP规则的真实世界应用中,也不是所有进程都用OTP行为实现并插入到监督树中。
经验法则非常简单。通过查看OTP带来的功能(代码更改、容错等)来确定您是否要遵循OTP设计原则,或者您是否计划集成OTP兼容代码。如果您想要OTP带来的任何功能,请务必遵循OTP原则,避免重复劳动。
如果你坚持OTP原则,并因此使用
gen_*
行为,你应该为任何不需要监督或代码升级的短期进程做一个简单的衍生。它不应该比部署一个发布版本的时间更长(否则,你无论如何都需要soft_purge
)。所有其他进程必须插入到监督树中,并可能实现一个gen_* 行为。