Review & Comments
Review & Comments
Review & Comments
多处理器编程:从入门到放弃
入门:线程库
spawn(fn): 创建共享内存的线程 (执行流、状态机)
join(): 等待线程结束
放弃:确定性 & 执行顺序 & 全局一致性
人类是 “sequential creatures”
具备
A
→
…
→
B
A \to \ldots \to B
A
→
…
→
B
简化为
A
→
B
A \to B
A
→
B
的直觉本能
编译器 (处理器也是编译器) 也是这样设计的
但是
多处理器彻底改变了 “执行” 的含义
任何 load 都可能读到其他线程写入的值
连 1 + 1 都不会实现了,这还怎么玩?
Review & Comments
不要急,我们是来解决问题的
线程 = 人
大脑能完成局部存储和计算
共享内存 = 物理世界
物理世界天生并行
程序 = 状态机
C 程序、机器指令、model checker……
物理世界也可以用状态迁移来建模