他山之玉,以及其他
他山之玉
活跃于 .NET 技术圈的老赵同学,最近写了一个不错的文章系列——《一个轻量级Actor模型实现》上、中、下。关于 ActorModel 可以参考《 Erlang Programming 》第七章 “并发” (98页)中的形象描述,也可以参照 Wikipedia 上 ActorModel 词条的严谨定义。
简而言之,所谓的 ActorModel 其本身的概念是极简单的,它只有两个基本的要素:每个 Actor 顺序地处理消息,多个 Actor 并发地执行。应该说,它是结构复杂(尤其是并行)应用程序的一种合理抽象。Joe Armstrong 在他的《 Erlang Programming 》第七章 “并发” 中认为:ActorModel 是从并发角度对人类社会的交互和协作行为进行模拟的结果。而在实际运用中,这一抽象模型,也早已广泛运用,其中的一些,我们还相当熟悉,比如:*nix 的进程和管道系统、 Email 系统、所有的 MQ 中间件,等等。作为抽象模型的 ActorModel ,它并不局限于某种特定的语言。换言之,采用任何一种语言(或者技术)都可以实现自己的 ActorModel 。
老赵以 .NET 实现的 ActorModel 原型,在基本特性上,已经具备了 ActorModel 的要素,细节可能仍有优化的余地。作为他自己独立思考和深入思辨的产物,不仅是对 .NET 技术领域的同学具有学习价值,对于 Erlangor 而言,因为他的模型是以 Erlang 作为样本的,而他实现过程的思辨,也给我们提供了相当独特的角度,反过来,对于我们理解 Erlang 本身的特性(为什么 Erlang 会被设计成这个样子),也很有帮助。
如下几个问题,建议 Erlangor 们在阅读老赵的文章时,顺便想想:
- Erlang 的轻量级线程与 ActorModel 的任务调度有何关系。
- Erlang 的动态类型+模式匹配方案和 ActorModel 的消息处理有何关系。
- ActorModel 和 Singleton 以及 Lock-Free 又有何关系。
感谢 xushiwei 的 twitter 投递。
其他
以下是 blah 部分,含水量极高,请部分读者自行无视。
国内的 Erlang 应用进入“低调务实”阶段?
- sohu 最新推出的 SNS —— “白社会”,使用 MochiWeb 作为 update notify 的 server 。打开 firebug 的 net 面板,很容易就能发现这一点(有请 sohu “白社会”的同学出来介绍一下详细情况)。
- litao.cheng 同学在某公司也采用了 MochiWeb + erlang … 来实现某统计业务。
- yufeng 同学在某公司采用 Erlang 实现动态集群。
- xushiwei 同学在某公司采用 C 来实现 Erlang 的某些特性,据说效果不俗。
- ……
再搞 Erlounge CN 的话,肯定会大有可观。
推荐阅读《Unix 编程艺术》
这一本书说起来是久闻大名,我却中了网络评论的毒,以为它是“拜 Unix 教”的《转X轮》或者是 Linux 老愤青 YY 的《中国不高兴》,所以一直也都没想过要找来看看。
某日,终于还是在图书馆(图书馆好地方啊)的一个书架前相遇了。随手抽出来翻了一下,本来准备扫一眼就放回去的,没想到就此读了一个下午,几乎到了让人放不下来的地步。相见恨晚啊。
尤其是书的第六章,作为一个 Erlangor 来说,共鸣尤为强烈。之前,总听人说 Erlang 的内部构造很象是一个 Unix 系的操作系统,这话听得多了,却总没什么感性认识,直到看了这本书,才觉得说得千真万确。
这种相似性,不只是体现在部分模块的命名/设计和很多思想的一脉相承上,更体现在 KISS 和以数据为核心的价值取向上。Erlang 的整个运行系统就好象是一个为并发进行过增强之后了的 Unix 系统(尤其是进程子系统和进程间通讯子系统),运行在它之上的程序就好比是 shell/perl 的脚本,以简单而强大的方式,通过由若干个彼此通讯的进程组成的计算网络来完成任务。
从这个角度,说 Erlang 是 Unix 核心思想朝并发方向的延伸和进化,并非只是 Erlangor 一厢情愿地想“往 Erlang 脸上贴金”的说法。
顺便查了一下这本书在 douban 上的评价,吃惊的发现进行过推荐的牛人严重扎堆。鄙视一下自己的火星。
关于 Concurrent Programming in Erlang Part2
知名的《Concurrent Programming in Erlang》一直都只在 Erlang.org 开放了 Part1 供大家免费下载,它的 Part2 因而充满了种种神秘的色彩。为了揭开这个谜底,我上次特地跑到“国家图书馆”外文阅览室,费了牛鼻子劲,终于将这本很可能是全中国唯一的一本,弄将出来瞧上了一瞧。下面是观感:
原来这本书的 Part2 内容比较杂,每个部分的篇幅内容也比较少,还略显有点过时(肯定的,是1996年出的,已经13年过去了)。尤其是其中讲 Database 的部分,似乎彼时连 Mnesia 都还没有成形,还有讲 GUI 的部分,使用也很少。其中的大部分内容,在网上都能找到其他的论述文章。可能唯有第 12 章 Operating Systems 的内容(也就是上述“Erlang OS 很象 Unix”的观点)似乎还没有看到相应的资料(知道的同学请补充之)。好在这部分内容关注的是 Erlang 的内部构造,它的缺失想必也不会太多的影响到大家的使用,所以关系应该不大。
情况就是这样子,貌似各位不需要惦记了。
遗漏了一点:Erlang 的 ActorModel 除了“并发性”之外,也(可能是更多的)关注“可靠性”,所以,对于其他语言的 ActorModel 实现,最难模拟的 Eralng-ActorModel 特性应该是 Linked Process 。
有空真的要学一下erlang..
呵呵。ActorModel也好,UNIX设计思想也好,都是表。Erlang最核心的还是其软件容错,其他不过都是副产品而已。自己可以深入的思考一下如何设计一个能够进行软件容错的系统,就会对Erlang有更深入的理解。
怎么申请加入讨论组?我发了两封邮件了,没有回复~
国图的那本<>是93年的第一版,第二版的<>内容还是值得看看的.