《Erlang/OTP并发编程实战》第一章 Erlang/OTP平台

  1. Erlang应用开发框架:开放电信平台(OTP, Open Telecom Platform)。 并发系统平台 
  2. OTP既是一个框架,又是一组库,更是一套构建应用的方法学,它本质上是对语言的扩展。
  3. C的创造背景:解决如何在硬件资源受限的情况下,用比汇编更高级的语言来开发系统软件。
  4. Erlang的创造背景:如何让程序员开发超大规模、高并发、强容错的软件,并彻底改善生产效率、减少软件缺陷的数量。
  5. OTP的优点:
    1. 生产效率:可在短时间内交付产品级的系统;
    2. 稳定性:基于OTP的代码可以更集中于逻辑,并避免重新实现那些容易出错而每个系统都必备的基础功能,如进程管理、服务器、状态机等;
    3. 监督:这是由框架提供的一套简便的监视和控制运行时系统的机制,既有自动化方式,也有图形用户界面方式;
    4. 可升级:框架为处理代码升级提供了一套系统化的模式;
    5. 可靠的代码库:OTP的代码全部经过严格的实战检验。
  6. 进程拥有自己的工作内存和信箱。
  7. 进程之间采用复制式通信,消息传递的基本语义使分布式与Erlang自然融为一体。
  8. 进程间通信方式:
    1. 持锁共享内存;
    2. 软件事务性内存:将内存当作传统数据库,用事务来决定何时写入什么内容,用乐观方式来规避锁;
    3. Future、Promise及同类机制:每个Future代表一个被外包到其他进程的计算结果,Future可以像其他对象一样被四处传递,但无法在计算完成前读取结果,必须等待计算完成。缺点是:令程序在远端进程故障和网络故障面前变得弱;
    4. 消息传递:
      1. 同步
      2. 异步
  9. Erlang中的消息传递原语是异步的。
  10. Erlang进程不是操作系统线程,它们由Erlang运行时系统实现,比线程要轻量得多。Erlang进程在启动时栈空间只需要几百字节,并且会按需伸缩。
  11. Erlang运行时系统(ERTS)
    1. 用C语言实现;
    2. 通过它才能跟文件系统和终端打交道,它还能处理内存,同时实现了Erlang进程;
    3. ERTS负责处理进程间的消息传递,并使处在不同机器上运行在各自ERTS中的进程能够像位于同一台机器上一样通信;
    4.  ERTS中特别重要的一个部分是:Erlang的虚拟机模拟器(BEAM Bogdan Erlang抽象机):执行Erlang程序经编译后产出字节码,非常高效。
  12. Erlang强大和高效的原因:
    1. 调度器:处理运行中的Erlang进程,令所有就绪的进程共享可用的CPU资源,并在新消息到达或发生超时的时候唤醒相应的睡眠中的进程;
    2. I/O模型:防止系统在进程与外部设备通信时阻塞,令系统平稳运行;
    3. 垃圾回收器:回收不再使用的内存
  13. 调度器:
    1. 最初的设计目的是在单CPU上并发运行轻量级Erlang进程,在单个操作系统进程上,跑着管理所有Erlang进程的调度器;
    2. 随着线程的普及,ERTS开始将I/O系统从运行Erlang进程的线程中拿出来,放到独立的线程中,但完成主体工作的线程仍然只有一个,如果用的多核系统,就必须在同一台机器运行多个ERTS实例;
    3. Erlang/OTP第11版中增加了对称多处理器(SMP)支持,令ERTS可以在内部使用不止一个进程调度器,每个占用一个独立的操作系统线程,每个调度器处理一个进程池;
    4. 在最新的Erlang/OTP发布版中,可以根据机器上CPU的拓扑情况将进程绑定到特定的调度器上,从而更好的利用硬件的缓存架构。
  14. I/O模型:在系统的最底层,Erlang以事件驱动的方式处理所有I/O,当数据进出系统时,程序可以以非阻塞方式完成数据处理,这降低了连接建立和断开的频次,还避免了OS层面上的加锁开销和上下文切换。
  15. 垃圾回收器:
    1. 分代复制式垃圾回收器;
    2. 不会在GC时遭受停顿,主要因为Erlang进程之间的隔离;
    3. 调度器知道每个进程最后一次运行的时间,如果某个进程自上次垃圾回收后什么也没干,调度器GC时会跳过它。
  16.  越来越多的人意识到,函数时编程及其背后的观念天然适用于并发与分布式编程问题。
  17. 函数式编程:
    1. 将函数看作和整数、字符串一样的数据;
    2. 运用函数而非while或for这样的循环结构来表达算法;
    3. 不修改变量和值。
发布了42 篇原创文章 · 获赞 2 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/sanmao123456_/article/details/103223381