erlang的语言功能特点

本文介绍Erlang语言如何通过轻量级进程、零锁编程、内置容错机制及分布式支持等特性实现高并发处理和系统容错。Erlang利用其独特的进程模型简化了异步编程,并提供了强大的故障恢复能力。

1.1. 高并发

1.进程

  • Erlang的最小执行单元是进程,进程的最大特点是隔离性好,(有自己的独立内存空间,Crash不会影响其他工作单元)。
  • Erlang的进程特点

2. 协程

  • 自己控制执行切换
  • 高效。由于不频繁切换系统上下文(页表等),效率比直接使用OS的高。

3. 成本极低

  • 一个Erlang进程,默认开销2K多一点(主要是栈和默认堆)
  • 对应的一个OS线程,一般栈空间都不少于512K
  • 由于是协程,进程切换直接成本极低


4. CPU亲和性

  • 协程,当然可以自己控制ERLANG进程绑定在特定的OS线程之上
  • 这个特性大大避免了锁开销

5. 零锁编程

  • 函数式编程本身理念就是无需锁的
  • 没有全局变量,进程本身状态也只有自己可以访问,因此找不到锁的用武之地
  • 不是绝对的,比如依赖外部异构资源,这个语言本身无法解决
  • Erlang的进程成本如此之低,因此我们可以以同步的方式来构建我们的异步系统。它的实现也是如此的,对耗时操作都会引起当前进程的trap.

1.2. 容错性

1.内置的容错性

  • 基于进程的,隔离性好
  • 支持异常捕获
  • 进程直接可以建立关系

发生了Link关系的两个进程可以感知另外一个进程的结束,不处理默认就是一起exit

2. 进程和节点监控

  • 有内置的监控机制去监控某个进程或者节点,可以感知他们down
  •  内置支持失败重启以-heart Cmd 标志启动,当前节点crash可以自动重启。这样你无须自己去写监控脚本。

  • OTPSupervisor模式

Supervisor可以把根据依赖关系,把进程搭建成树状结构,高层的节点或者叶节点被低层监控。

监控节点可以根据参数决定子节点的重启策略

  • 当前进程挂掉了重启间隔时间
  • 指定时间内重启最大频率
  • 重启时是重启自己 || 所有的进程 || 配置时排在当前进程之后

1.3. 分布式支持

1. 节点位置透明

根据节点名可以连到节点,无需指定具体的端口号

2. 自动连接

发生通讯的进程,如果处于两个节点上,这两个节点可以自动连接

3. 连接协议可配置

节点之间的连接协议是可以配置的,内置支持TCPSSL,也可以开发自己的协议

4. 全联通

A连接了B,如果A在连接了C,这时BC之间也可以互相感知了(nodes()monitor都可以感知到)

5. 透明路由

进程之间的通讯不论是同一节点上,跨节点,或者跨机器,都可以以统一的Pid!Message的方式进行通讯。

因此,我们可以以统一的方式来构建我们的系统。

6. TakeOver

可以配置多个节点来运行指定应用,系统会根据顺序选定当前服务节点。如果节点挂了,后面的依次被选择。那些优先节点恢复后会抢夺运行权,重新由它提供服务

7. 代码中心

可以指定在指定机器运行代码。

它的具体实现是通过ssh在指定机器上运行erlang并把要运行的代码复制过去,然后执行。

1.4. 代码热升级

由于没有变量,而且都是基于函数式的实现,因而可以实现代码热升级。(执行的入口改了,所有的状态都在进程上下文中,下次调用时携带到参数里就行了)

1.5. Port管道

ErlangDSL,不适合构建太复杂业务的系统。他提供了一种异构系统互通的机制,就是Port管道。

可以直接调用外部应用,跟外部应用stdinstdout对接。也可以开发自己driver(可以做更加精细的控制,比如常驻内存select输入,输出,不同阶段有不同的回调)

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值