您的位置:首页 > 其它

第一章

2009-08-13 20:02 120 查看


世界是并行的。
如果我们要写一个与现实世界中的对象有相同行为的程序,那么这个程序将拥有并发的架构。
使用为并发应用而设计的语言,开发将变得非常简单。
Erlang程序模仿了现实世界中我们的思路和交互方式。




JoeArmstrong







Erlang编程
并行世界的软件


第一章 开始

哦,不。我必须要学一门新的语言吗?现在这些还不够吗?

我可以理解你的反应。学习编程语言是有些负担的。为什么还要学其他的呢?
以下是学习Erlang的五个理由:
你希望编写一个在多核CPU上运行更快的程序.
你要编写一个容错处理程序,在修改的时候不需要通知客户停止服务.
你听说了函数式编程并想验证一下.

你要使用一门这样的语言:在大型工业产品实战中测试过、拥有大量的文献及用户社区。.
你希望将手指从大量的代码中解脱.

我们能做到这些吗?在20.3节, 运行 SMP Erlang, 376页,我们将看到一些程序在三CPU双核电脑上运行速度会成线性增长. 18章, 生成基于OTP的系统,我们将看到如何生成高度可靠的系统【已经连续运行多年】. 在16.1节, The Road to the Generic Server, 292页,我们将讨论不需要停止服务就能更新的技术.
很多时候我们都在称赞函数式编程的优点。函数式编程可以防止代码的副作用。副作用和并发没有直接关系。可能有一系列代码具有副作用,也可能有些具有并发但无副作用的代码.你要作出选择,没有中庸的方式。
Erlang是一个依靠程序语言而不是操作系统实现并发的语言.Erlang生成并行程序很容易,模仿现实世界的一系列并行过程,这些过程只需通过交换消息进行交互。在Erlang的世界,存在并行进程但没有锁,没有同步方法,没有可能的共享内存冲突,因为根本不需要共享内存。
Erlang程序可以生成成千上万的过程运行在单处理器、多处理器及网络环境.
1.1 RoadMap
第 2章, GettingStarted, 第18页是快速了解的章节.
第 3章, Sequential Programming, 第43页是介绍串行程序的两章中的第一章. 介绍协调的模式和非破坏性调用的思想。
第 4章, Exceptions,第 76页,是关于异常处理的.没有程序是不报错误的. 本章与串行Erlang程序错误截获和处理相关。
第5章, Advanced Sequential Programming.第86页是第二章关于串行化Erlang程序的内容。谈论了一些串行程序的高级主题和其他细节信息。
第 6章, Compiling and Running Your Program, 第118页。使用不同的方式编译并运行你的程序.
第 7章, Concurrency, 第137页. 本章与技术无关.我们程序背后的思想是什么?我们如何看这个世界?
第 8章, Concurrent Programming,第141页,关于并行.我们如何在Erlang中创建并行过程?过程间如何通讯?如何更快创建并行过程?

第9章, Errors in Concurrent Programs,第159页.谈论并行程序中的错误.过程失败时发生了什么? 我们如何截获错误,如何处理呢?
第10章, Distributed Programming, 第175页.讨论分布式程序.这里我们写了一些小分布式程序并展示如何在Erlang节点或基于Socket分布式的独立主机集群上运行他们.
第11章, IRCLite, 第191页是纯粹的应用章节. 在我们第一个小的类似于IRC客户端服务器架构的实用应用中我们将并发和基于Socket分布式的话题合并一处.
第12章, InterfacingTechniques,第 212页是关于Erlang对其他语言的接口部分.
第13章, Programming with Files, 第 226页.展示了很多关于文件编程的例子.
第 14章, Programming with Sockets,第245页展示了如何基于Socket编程.我们将看到如何创建并行和串行的Erlang服务.我们在本章中完成了第二个大的应用:SHOWT广播服务,这是一个流媒体服务,可以使用SHOWT广播协议播放MP3流.
第15章, ETS and DETS: Large Data Storage Mechanisms, 第273页 .描述了底层的ets和dets模块. Ets是一个非常快、具有破坏性的、基于内存Hash表操作的模块,dets设计用于底层磁盘存储.
第16章, OTP Introduction,第291页,介绍OTP. OTP是Erlang用于创建工业级应用的库及操作过程的集合.本章介绍其处理方式的思想(OTP的中心思想).应用这些处理方式,我们可以集中精力在组建的功能上,而让框架去解决非功能方面的问题. 这些框架可能处理应用的容错处理或扩展性,从而使我们可以集中精力去解决一些具体问题.本章开始讨论如何创建自己的处理方式,然后描述Erlang标准库中的Gen_Server处理方式.
第17章, Mnesia:The Erlang Database,第 313页.讨论Erlang数据库管理系统 (DBMS) Mnesia.Mnesia是一个快速、平易近人、实时相应的整合DBMS.它可以配置为将数据复制到多个物理分散节点上从而提供容错处理操作.
第18章, Making a System with OTP,第335页是第二个涉及OTP的章节. 处理实际上衔接OTP应用的方面.实际应用中有很多繁琐的小细节. 他们的开始及结束必须在一定程度上保持一致. 如果他们或其子组建发生冲突将会重启,我们需要错误日志来判断冲突发生后又发生了什么. 本章描述创建完全实用的OTP应用中需注意的所有细节.
第 19章, Multicore Prelude,第365页.简短的介绍一下为什么Erlang实用于多核计算机.我们笼统的谈论了共享内存和消息传递的并发和为什么我们强烈的相信这门语言是稳定的并发的非常适合多核计算机.
第 20章, Programming Multicore CPUs, 第367章.关于多核计算机编程.我们谈到的技术可以确保Erlang高效运行在多核计算机上.介绍了很多在多核计算机上提升串行程序运行速度的经验.最后我们制定了一些度量标准并开发了我们的第三个主要程序,一个全文搜索引擎.写这个程序时,我首先实现了一个函数叫mapreduce—只是一个在处理单元集合上高度并发的函数.
附录 A,第 390页,描述了Erlang函数的典型系统.
附录 B,第396页, 描述了如何在Windows操作系统上安装Erlang (及如何在所有操作系统的配置emacs).
附录 C, 第399页, Erlang资源目录.
附录 D,第403页,描述lib_chan--基于Socke分布式开发的库.


附录 E,第419页,分析、概况、调试、跟踪代码的技巧.
附录 F, 第439页,用一行汇总了Erlang标准库中常用的模块.

1.2 从新开始
此时程序员们面对的是一本描述滑稽的编程语言书籍.陌生的语法,等号并不是等于,变量不能赋值.更糟的是,这不是面向对象的.这个程序是…完全不同的东西
不仅仅是语法不同,整个的编程方式也不同.作者一直在强调并发和分布式、容错处理和一种编程方法:面向并发编程----这意味着什么?
而且一些范例看起来非常有趣.即使是一个图表范例程序.非常的小,虽然语法上有些生疏但也非常易于理解.确实不能在简单了.
最基础的程序非常简单,仅仅有几行代码,实现了文件共享和加密传输.程序员们开始疑问....
这些是什么呢?
这些是关于并发.关于分布式.关于容错处理.关于面向功能编程.关于不用锁和互斥纯粹依靠消息传递实现的分布式并发程序.关于在多核计算机上提升程序速度.关于书写可让人们交互的分布式应用.关于书写容错处理和分布式系统的设计方法和行为方式.关于一个并发模型和将此模型用于计算机程序----这个过程我叫做面向并发编程.
我很高兴创作了本书,希望你们页能从中找到乐趣.
现在阅读吧,写一些代码,找到快乐.
ACKNOWLEDGMENTS 17
1.3 感谢
在准备本书的时候很多人给予了帮助,在此感谢所有人.首先, Dave Thomas,我的编辑: Dave教会了我写作并解答了无数的问题.为什么这样?为什么那样?当我刚开始写作的时候,Dave说我像是在”写演讲稿”他说, “我希望你去告诉人们,而不是演讲” 本书由此获益良多. Thanks, Dave.
Next,……[本处省略100字]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: