世界是并发的,Erlang为并发而生
如果希望将程序的行为设计得与真实世界物体的行为相一致,那么程序就应该具有并发结构。
Herb Sutter本人曾表示,如果一个语言不能够以优雅可靠的方式处理并行计算的问题,那它就了去看21世纪的生存权。
作为一名程序员,随着工作经验的增长,如果足够幸运的话,终有一日,我们都将会直面大型系统的挑战,最初的手忙脚乱总是难免的。
经历过最初的迷茫之后,你会惊讶发发现这是一个完全不同的“生态系统”。要在这样的环境中生存,我们的代码需要具备一些之前我们相当陌生
或者闻所未闻的“生存技能”,容错,分布,负载均衡,这些词会频繁的出现在搜索列表之中,经过几轮各种方案的轮番上阵之后,我们会开始反思这
一系列问题的来龙去脉,重新审视整个系统架构,寻找瓶颈所在。你可能会和我一样,最终将目光停留在那些之前被认为是无懈可击的优秀代码上。
开始琢磨:究竟是什么让它们在新的环境中“水土不服”,妨碍其更加有效的利用越来越膨胀的计算资源?
Erlang为并发而生,20多年前,它的创建者们就意识到了这一个问题,从而辗转到一条与众不同的路。
Erlang采用消息模型,进程之间不共享任何数据! 完全避免锁的概念!
它用进程+消息模型来建模现实世界中多人协作的场景,一个进程就是一个人,人与人之间并不存在任何共享内存,每个人有每个人的记忆,动作,习惯。
彼此之间的协作完全通过消息(说话,手势,做表情,等等)交互来完成,这正是我们每个人生而知之的并发模型。
软件模拟现实世界协作和交互的场景–这也是所谓的COP(面向并发编程)思想。
对于Erlang这种有些怪异的小众语言来说,是否真的会成为“下一个JAVA”?实难预测,但有有一点,已经毫无疑问,那就是,不管“下代语言”是什么,
它至少会像Erlang一样,处理好与并发相关的一系列问题(或者说做的更好)。
下面附上第8章11小节习题的自己解决方案! ^_^
第一小题
题目: 编写一个函数start(AnAtom,Fun)来把spawn(Fun)的结果注册为AnAtom。当两个并行的进行同时执行到
start/2函数时,要确保代码能够正常工作。也就是说,这两个进程其中一个成功执行,而另一个必须执行失败。
解决方案:
运行结果:
第二小题
题目: 编写一个环形基准测试。在一个环形创建N个进程。然后沿着环发送一条消息M次,最后总共发送N*M条消息。在N和M的不同取值下测试整个过程会消耗多长时间。
解决方案:
运行结果: