Erlang文档计划,发布中文文档《扩展 Erlang 的进程注册表》
gigix 已经完成了对 Erlang 文档计划 中收录的 U. Wiger. 在 EUC 07 Erlang WorkShop 上发表的文档“Extended Process Registry for Erlang”一文的翻译。
摘录
扩展Erlang的进程注册表
内建的进程注册表早已被实践证明是Erlang语言中一项极其有用的特性。它使得开发者能够很轻松地提供具名服务 (named services):用户无需知道服务进程的进程标识符(process identifier,PID)即可使用这些服务。
但目前的进程注册表也有其局限性:进程的名字必须是atom(不支持有结构的数据),每个进程只能用一个名字注册,并且缺乏有效的搜索和遍历机制。
在Ericsson下属的IMS Gateways的产品开发中,我们经常需要维护一张映射表,以便根据各种属性找到负责处理调用的进程。我们从中发现了一个通用的模式(一种索引表),并由此开始开发一个扩展的进程注册表。
一开始这个想法并没有立即体现出价值,甚至看不出在实用中提供了多大的便利。但随着开发的进行,程序设计者们越来越多地使用这个扩展的进程注册表,并因此显著减少了代码量、提高了实现一致性。此外,扩展的进程注册表还提供了一种强大的调试机制,能够在数万个进程中进行有效的调试 。
本文介绍了这种扩展的进程注册表,并对其进行检讨,从而提出一种新的实现方式,使之更具一致性、效率更高、并且支持全局命名空间。
这篇文章仔细研究了 Erlang 核心之一的注册机制,通过展现现有方式在解决具体需求时所面临的困境,指出了其功能与实际需求之间的差距。并从实践之中提取了进行扩展的方法(以及解决方案本身的演化)。非常难得的是,此文并没有纯从理论的角度泛泛而谈,而是基于实践,逐层分析,步步改进,是 the Erlang way 另外一篇非常不错的实战案例。其中对于 OTP 内部几处代码的分析与优化尤其精彩。值得认真一读。此外,由于 U. Wiger. 的特殊身份,如果这个扩展模块变成 OTP 的官方模块,大家也没有理由感到惊奇。
让我们对 gigix 向 erlang 中文社区作出的贡献表示感谢!
另外, gigix 已经开始了对于“Programming Distributed Erlang Applications: Pitfalls and Recipes”一文的翻译,在 erlang 中文社区能有 gigix 这样优秀的译者,实乃大家之福。


Write a Comment