聊聊并发编程.PDFVIP

  • 0
  • 0
  • 约3.45千字
  • 约 36页
  • 2019-08-18 发布于北京
  • 举报
聊聊并发编程.PDF

并发编程 sunkai 趋势 摩尔定律 多核危机 Amdahl定律 Erlang Haskell Clojure Go Scala 并发 vs 并⾏ 并发是同⼀时间应对(dealing with )多件事情的能⼒; 并⾏是同⼀时间动⼿做(doing )多件事情的能⼒; —— Rod Pike 并⾏不等于 多核 Bit-Level Instruction-Level Data-Level Task-Level 并发不只是 多核多线程 性能 ⾼效 容错 简单 聊聊并发模型 线程 锁 线程 锁 • 底层硬件运⾏过程的形式化 • 并发的基本单元—线程 • 线程间通过共享内存来通信 线程 锁 • 竞争条件 • 乱序 • 可⻅性 线程 锁 • 语⾔级解决⽅案 - 内存模型 ie. Java Memory Model (JSR 133) - happens-before - as-if-serial • 其他问题 - 死锁 - 活锁 复杂性 • 可中断锁 • ThreadPool • 可超时锁 • CopyOnWrite • 交替锁 • BlockingQueue • 分段锁 • Compare and swap • Condition 可变状态 + 并发 = 不确定性 可变性是灾难! 函数式编程 函数式编程 • 命令式编程 vs 函数式编程 - 计算过程,转换成改变全局状态的指令 - 计算过程,抽象为表达式(纯函数)求值 函数式编程 • y = f(x) - input: x - output: y • ⽆副作⽤的纯函数,⽆可变状态,天然⽀持并发 • x=x+1 FAIL 函数式编程 • Immutable data • First class functions • Tail recursion • Currying • … 函数式编程 list.parallelStream      .map(this::retrieveFromA)     .map(this::processUsingB)    .forEach(this::saveToC) Java 8 Streams STM 函数式编程 - Clojure • Lisp⽅⾔ • b

文档评论(0)

1亿VIP精品文档

相关文档