并发与内存模型
并发与内存模型定义了并发程序的结构以及其交互线程如何观察共享内存,是正确并行软件的基础。
用 PaperMind 寻找选题即将推出Find papers & topics
Tools & resources
Learn & explore
视频即将推出
Definition
并发模型描述了独立执行的计算如何组合和通信,而内存模型则指定了当并发线程访问共享内存时,读取可能观察到的值,从而定义了程序员、语言和硬件之间的契约。
Scope
该领域涵盖并发的语言和理论:用于通信和同步的进程演算和并发模型,指定内存操作允许顺序的内存一致性模型,同步机制和数据竞争自由,以及用于并发的类型系统,如会话类型。它探讨了语言如何赋予同时执行并共享状态的程序以意义。
Sub-topics
Core questions
- 如何对并发通信进程进行建模和推理?
- 程序可以观察到内存操作的哪些顺序?
- 如何保证或指定数据竞争的自由?
- 类型如何规范通信并防止并发错误?
Key theories
- 进程演算
- Hoare的CSP和Milner的CCS及π-演算提供了并发、通信进程的代数理论,包含用于组合和同步的运算符以及行为等价概念,如双模拟。
- 顺序一致性
- Lamport将顺序一致性定义为多处理器执行必须表现为每个处理器操作按程序顺序的某种交错,这是衡量较弱内存模型的基准。
- 内存一致性模型
- Adve和Gharachorloo系统化了共享内存一致性模型的范围,解释了宽松的顺序如何实现性能,同时使并发程序的推理复杂化。
Clinical relevance
内存模型现在已成为主流语言规范(例如C++和Java)的一部分,因为多核硬件使得宽松的顺序变得可观察;正确理解它们对于正确的、可移植的并发软件至关重要。进程演算和会话类型为消息传递语言和协议的设计提供了信息。
History
并发理论起源于Petri网以及Hoare(CSP)和Milner(CCS)在20世纪70年代的工作,后来发展出用于移动进程的π-演算。Lamport于1979年定义了顺序一致性;随着宽松硬件的普及,内存模型在21世纪初被形式化用于Java和C++等语言,弱内存语义成为一个活跃的研究领域。
Debates
- 强内存一致性与弱内存一致性
- 设计者权衡了顺序一致性等强模型的直观简洁性与允许重排序的弱模型的性能,后者使推理复杂化并需要仔细的语言级语义。
Key figures
- C. A. R. Hoare
- Robin Milner
- Leslie Lamport
- Sarita Adve
Related topics
Seminal works
- hoare1978
- milner1989
- lamport1979
- adve1996
Frequently asked questions
- 什么是内存模型?
- 内存模型是一种形式契约,它规定了当多个线程访问共享内存时,读取可以返回哪些值,定义了编译器和硬件可以执行的重排序以及程序员可以依赖的内容。
- 什么是顺序一致性?
- 顺序一致性要求并发执行表现为线程操作的某种单一交错,且尊重每个线程的程序顺序,使其成为最直观(但通常被放宽)的内存模型。