ErlangOTP并发编程实战(图灵程序设计丛书31)(MartinLoganEricMerrittRichardCarlsson)

书: https://pan.baidu.com/s/15VfTw9eJ2MoiHktwswP0gw?pwd=tq5x
笔记如下:

一、Erlang并发哲学

  1. “Erlang的并发单位是轻量级进程(Lightweight Process),每进程独立堆栈,由调度器管理,切换成本极低。”
  2. “共享无状态(Share Nothing):进程间仅通过消息传递通信,避免锁与竞态条件。”

二、进程与消息

  1. spawn创建进程,!发送异步消息,receive模式匹配处理消息,支持超时(after 5000 -> timeout)。”
  2. “进程链接(link)与监控(monitor):前者双向生命周期绑定,后者单向异步通知。”

三、OTP设计原则

  1. “OTP行为的四大支柱:GenServer(通用服务器)、Supervisor(监督树)、Application(应用封装)、GenEvent(事件处理)。”
  2. “GenServer回调模块必须实现init/1handle_call/3(同步请求)、handle_cast/2(异步请求)。”

四、容错与监督

  1. **“监督策略(Supervision Strategy):
    • one_for_one:子进程独立重启;
    • one_for_all:任一子进程崩溃重启所有。”**
  2. “进程沙盒(Process Isolation):一个进程崩溃不会影响其他进程,由监督树处理恢复。”

五、分布式Erlang

  1. “节点间通信:node()获取当前节点名,{Name, Node} ! Msg跨节点发送消息。”
  2. “CAP权衡:Erlang默认选择可用性(AP),通过最终一致性解决网络分区问题。”

六、热代码升级

  1. “代码热加载:.beam模块可动态替换,运行中进程通过sys:suspend/sys:change_code迁移状态。”

七、性能优化

  1. “ETS(Erlang Term Storage)提供进程共享的内存表,但需手动处理并发访问(如ets:safe_fixtable)。”
  2. “二进制处理(<<...>>)比列表操作高效,适合协议解析(如<<Len:32, Data:Len/binary>>)。”

八、模式匹配威力

  1. casereceive和函数头中的模式匹配是Erlang的核心抽象工具,替代传统条件语句。”

九、调试与追踪

  1. dbg模块动态追踪函数调用,sys:trace监控GenServer消息流。”

十、设计哲学

  1. “面向错误编程(Let it crash):集中处理错误而非防御性检查,监督树负责恢复。”
  2. “幂等设计:消息处理函数应可重复执行,避免副作用(如重复扣款)。”

附:OTP应用结构

  1. **“标准OTP应用目录结构:
  • src/:源代码;
  • ebin/:编译后的.beam
  • priv/:静态资源;
  • .app文件描述元数据。”**

经典问题解决方案

  1. “进程字典(get/put)应避免使用——破坏可预测性,改用GenServer状态或ETS。”
  2. **“大规模系统设计:
  • 水平扩展:无状态服务多节点部署;
  • 垂直扩展:关键服务分配更多调度器。”**

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注