现在的位置: 首页 > 自动控制 > 工业·编程 > 正文

erlang有5个核心概念和特征

2020-03-05 23:18 工业·编程 ⁄ 共 1884字 ⁄ 字号 暂无评论

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、函数式编程

函数式编程,其主要思想就是将函数看作和整数、字符串一样的数据。

给我留言

留言无头像?