Erlang——并发和分布式程序

Erlang的并发主要依赖于多进程来实现,相比C++中的进程,Erlang的进程属于编程语言而非操作系统,这意味着Erlang编写的多进程具有较好的移植性。


Erlang的核心架构是客户端-服务器:服务器与客户端指的是两种进程所扮演的角色(前者接受请求并回复,后者发送请求),是级别相同的两个进程。


对于顺序语言而言,在单一顺序进程中,进程崩溃和世界毁灭差不多,因此顺序语言会把重点放在故障预防之上,强调进行防御式编程。而对于Erlang而言,拥有大量的进程可供支配,单进程的故障不会有太大的影响,通常只需要编写少量的防御性代码,而把重点放在编写纠错性代码上。Erlang关于构建容错式软件的理念:“让其他进程修复错误”(安排进程间相互监督各自的健康状况)和“任其崩溃”(程序出错时让其立即崩溃)。


在如C语言等防御性编程中,错误检查代码与非错误检测代码需要交织一起编写,程序一边执行业务逻辑一边检测参数以避免崩溃。而Erlang中则是直接将程序构建成为两部分,一部分负责执行业务逻辑(仅加入少量防御性代码,假设所有的参数都是正确的不进行过多的检查),而另一部分负责在错误发生时纠错它们(比较通用,可以用在许多不同的应用程序里),这样错误检查代码和非错误检查代码有了明显的区分,两者不会交织在一起。


Erlang使用了比较极端的方式来使得大量进程的并行执行变得更加简单——那就是Erlang中,变量是不可变的,变量一旦赋予值就无法再改变,带来的好处就是没有可变状态,就不需要内存共享,也就不需要有锁。也正因为如此在Erlang中没有像C++那样,进程间拥有多种不同的交互方式(管道、消息队列、存储共享等等),进程之间的唯一交互方式就是消息传递。

猜你喜欢

转载自blog.csdn.net/q8547957/article/details/51850390