并发编程实战otp--open telecom platform 一

阅读更多

1.erlang 的进程模型:
 并发的基本单位是进程,每个进程都代表一个持续的活动,进程封装了状态,不能共享,让他独立于其它进程来思考和生存,相互隔离,并确保自身内部状态的改变不对其他进程造成影响。
  由于以上,只能进行复制必的通信。(因为是复制,所以分布式很容易,每个接收方都有一个么有的 消息copy,意味着网络编程和单机编程完成一样。
2. 4种进程通信范式:
  1.   持锁的共享内存: 就和goto一样,身为主流进程通信技能,锁的应用太广泛,开销太大(死锁,多重锁什么的)。
  2.       软件事务性内存: 多个竞争进程同时请求事务,只有一个成功,其它则失败后重新请求,(事务系统本身开销大)。
  3.   Future Promise及同类机制: 每一个future代表一个被外包到其它进程的计算结果,进程可能跑在别的cpu,缺点:远端故障和网络故障时无所适从。
  4.   消息传递:同步和异步:好多独立数据的copy。复制大型数据结构成本很高。内存消耗大。但是最简单,务实,灵活
3. 用erlang进程编程:
  生成一个进程跟在普通面向对象语言中分配一个对象的开销差不多。
  1.   创建进程,派生; 典型的线程会在地址空间中为自己放数M栈的空间,erlang进程在启动时只需求几百字节并且可以按需伸缩。spawn(io,format,["erlang"]).
  2.       进程之间打交道;用!读作bang 目的地!消息 (寄明信片一样的)
  3.   进程的终止:进程工作内存,信箱,其他资源都会回收。必须在彰显式地将数据以消息的形式投递出去。 异常(造成进程意外提前终止,其它进程也会收到通知),容错
4. Erlang的容错架构:
  1. 进程链接如何工作;

        
  2. 监督与退出信号的捕捉;
          trap_exit标记后,有一条{"EXIT,Pid,Reason}的消息,
  3. 进程的分层容错;尽量小范畴的重启,粒子量越小越好。
   所有的关键在于监控树要建好。
   那为什么还搞分布:内存,硬盘驱动,网络连接一个机器都是有限的,要搞之分布。,隔离使之不宕机。
5. Erlang运行时系统和虚拟机
  标准Erlang实现是一个erlang运行时系统ERTS----调度器,I/0模型,垃圾回收器。
   这是一片我不理解的领土。
6. 函数式编程:Erlang的独具匠心的处世之道。
  :将函数看作和整数,字符串一样的数据;运用函数调用而非while for来表达算法;不修改变量的值




    

你可能感兴趣的:(并发编程实战otp--open telecom platform 一)