编译原理实战课
宫文学
北京原点代码 CEO
26066 人已学习
新⼈⾸单¥59
登录后,你可以任选4讲全文学习
课程目录
已完结/共 55 讲
真实编译器解析篇 (19讲)
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

33 | 并发中的编译技术(一):如何从语言层面支持线程?

内存屏障技术
解决变量的可见性问题
cmpxchg指令
字节码分析
保证操作的原子性
volatile关键字
synchronized关键字
进程与线程
并行与并发
现代应用需求增加
CPU制程挑战
参考资料
一课一思
课程小结
Java的并发机制
并发的底层机制
并发计算需求增长
并发中的编译技术

该思维导图由 AI 生成,仅供参考

你好,我是宫文学。
现代的编程语言,开始越来越多地采用并发计算的模式。这也对语言的设计和编译技术提出了要求,需要能够更方便地利用计算机的多核处理能力。
并发计算需求的增长跟两个趋势有关:一是,CPU 在制程上的挑战越来越大,逼近物理极限,主频提升也越来越慢,计算能力的提升主要靠核数的增加,比如现在的手机,核数越来越多,动不动就 8 核、12 核,用于服务器的 CPU 核数则更多;二是,现代应用对并发处理的需求越来越高,云计算、人工智能、大数据和 5G 都会吃掉大量的计算量。
因此,在现代语言中,友好的并发处理能力是一项重要特性,也就需要编译技术进行相应的配合。现代计算机语言采用了多种并发技术,包括线程、协程、Actor 模式等。我会用三讲来带你了解它们,从而理解编译技术要如何与这些并发计算模式相配合。
这一讲,我们重点探讨线程模式,它是现代计算机语言中支持并发的基础模式。它也是讨论协程和 Actor 等其他话题的基础。
不过在此之前,我们需要先了解一下并发计算的一点底层机制:并行与并发、进程和线程。

并发的底层机制:并行与并发、进程与线程

我们先来学习一下硬件层面对并行计算的支持。
假设你的计算机有两颗 CPU,每颗 CPU 有两个内核,那么在同一时间,至少可以有 4 个程序同时运行。
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

现代编程语言中的并发计算模式对语言设计和编译技术提出了新的要求。随着计算机多核处理能力的增强和现代应用对并发处理需求的增加,友好的并发处理能力成为了一项重要特性。本文从并发计算的底层机制出发,介绍了并行与并发、进程与线程的概念。线程作为现代计算机语言中支持并发的基础模式,在语言层面提供了一些原生的支持。Java语言作为例子,对操作系统的线程进行了封装,提供了关键字synchronized和volatile来解决多个线程访问共享内存的难题。文章通过讲解硬件层面对并行计算的支持和操作系统的调度程序实现了对并发技术的介绍,为读者提供了对现代编程语言中并发计算模式的基本了解。 本文重点讨论了线程的原生支持和关键字synchronized的作用原理,以及volatile关键字解决变量可见性问题的机制。通过分析字节码和汇编代码,阐述了多线程访问共享内存可能导致的数据错误,并介绍了synchronized关键字如何保证操作的原子性。此外,还对硬件层面的支持进行了解释,说明了如何通过CPU的支持实现原子操作,保证一段代码在同一时间只让一个线程执行。总结起来,本文深入浅出地介绍了现代编程语言中并发计算模式的基本原理和实现方式,对读者快速了解并发计算提供了有益的指导。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《编译原理实战课》
新⼈⾸单¥59
立即购买
登录 后留言

全部留言(1)

  • 最新
  • 精选
  • reverse
    c++ 14 也有 相同的 volatile 属性,但是别的专栏讲的非常浅,无法深入理解,谢谢老师的讲解
    2020-08-28
    1
    3
收起评论
显示
设置
留言
1
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部