码迷,mamicode.com
首页 > 其他好文 > 详细

Erlang(一)

时间:2016-04-27 09:33:35      阅读:185      评论:0      收藏:0      [点我收藏+]

标签:

  erlang是不像C语言面向过程,也不像C++面向对象,它是一门面向进程的语言,erlang是一个平台,是一种模拟器,是一种介于操作系统和应用程 序之间的状态,所以erlang参数也有两种,一种是控制模拟器的参数,一般以“+”为开头;一种是控制应用程序的参数,以“-”开头,这个以后会讲到。
erlang有5个核心概念和特征:
1、并发编程
什么是并发?并发简单的说就是无须以特定顺序执行的事物,如果硬件允许,那么进程可以同时执行,如果硬件不允许,则交替执行,进程与进程之间相互独立且执行没有顺序之分,这样就是并发。
erlang 的一大优势就是它帮你隐藏了任务实际执行的细节,如果有额外的CPU,erlang会利用他们并行执行更多并发任务,如果没有,erlang会利用现有的 CPU处理能力一点一点的交替执行任务,你不必操心这些细节,erlang程序能够自动适配不同的硬件——CPU越多她们跑的越快,当然,前提是任务的组 织方式允许它们被并发执行。
在erlang中,并发的基本单位是进程,每个进程是某段程序代码的执行代理,与其他的进程一起并发运行,相互独立,互不影响,以确保自身内部状态的改变不对其他进程造成影响。
erlang进程不像很多其他的语言和操作系统中的线程一样,共享相同的内存空间,erlang进程拥有自己的工作内存空间和自己的信箱,其中信箱用于存放外来信息。
由 于进程之间互不共享内部状态,它们只能进行复制式通信,一个进程要跟其他进程交换信息,就会发送一条信息,这条信息是发送方所持有数据的一个只读副 本,erlang的进程间的通信机制总会让接收方获取一份私有的消息副本,即使消息收发双方同处在一台机器上,这就意味着网络编程和单机编程完全一样!
消 息传递一般可分为两类:同步方式和异步方式。在同步方式下,消息抵达接收端之前发送方什么事也做不了;在异步方式下,消息一经投递发送方便可立即着手其他 事务,同步很容易用异步实现,令接收方总是向发送方回传一个显式的回复即可。因此,erlang中的消息传递原语是异步的。
当然,收发双发在这一 层面的隔离并不是免费的,复制大型数据结构时成本很高,如果发送方还要保留数据副本,势必造成较高的内存消耗,在实践中,这意味着你必须在发送消息是小心 掌控消息的大小和复杂度,不过一般来说,地道的erlang程序用到的大部分消息都比较小,复制开销通常可以忽略。
在开发erlang程序时,首先要想那些活动是可以并发的,或者说那些活动可以彼此相互独立地进行,然后将一个复杂的运算切分为若干并发部件,再全部建模为独立的进程,启动运算、派生进程、处理数据,在进程完工后,它的工作内存、信箱和其他资源都会自动回收。
2、容错
erlang 进程意外退出时,会产生一个退出信号,所有与濒死进程链接的进程都会收到这个信号,默认情况下,接受方会一并退出并将信号传播给与它链接的其他进程,直到 所有直接或间接链接在一起的进程统统退出为止,这种级联行为可以使一组进程像单个应用一样退出,因此系统整体重启时你不必担心是否还有残存下来未能完全关 闭的进程。
erlang容错哲学简单说就是“鼓励崩溃”,精准记录下事发位置和经过后,把一切彻底抛下重新再来。
OTP实现容错的主要途 径之一就是改写退出信号默认的传播行为。通过设置trap_exit进程标记,你可以令进程不再服从外来的退出信号,而是将其捕捉,这种情况下,进程接受 到信号后,会先将其转为一条格式为{‘EXIT‘,Pid,Resson}的信息,该信息描述了哪个进程出于什么原因而发生故障,然后这条消息会像普通消 息一样被丢入信箱,捕捉到信号的进程就能分检并处理这类消息了,这类会捕获信号的进程有时被称为系统进程,它们执行的代码往往有别于普通的工作进程(即通 常不捕捉信号的进程),身为防范退出信号进一步传播的壁垒,系统进程阻断了与之链接的其他进程和外界直接的联系,因而可用于汇报故障乃至重启故障的子系 统,我们将这类进程称为监督者。
3、分布式
借助于语言属性和基于复制的进程通信,Erlang程序天然就可以分布到多台计算机上,可以直接分布到多个网络节点上。
4、erlang运行时系统和虚拟机
标 准erlang实现的核心是一个称为erlang运行时系统(ERTS)的应用,这是一大块用C语言写成的代码,负责erlang中所有底层的玩意儿,通 过它你才能跟文件系统和终端打交道,它还处理内存,实现erlang进程的也是它,ERTS知道如何将这些进程分布到现有的CPU资源上才能充分发挥计算 机硬件的能力,同时,哪怕你只有一个单核CPU它也能实现erlang进程的并发执行,ERTS还负责处理进程间的消息传递,并使处在不同机器上运行在各 自的ERTS中的进程能够像处在同一台机器上一样进程通信,erlang中所有需要底层支持的东西都由ERTS处理,所以ERTS移植到哪个平台 erlang就能在哪个平台上跑。
5、函数式编程
函数式编程,其主要思想就是将函数看作和整数、字符串一样的数据。

Erlang(一)

标签:

原文地址:http://www.cnblogs.com/hzy1987/p/5437507.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!