编译原理实战课
宫文学
北京物演科技CEO
新⼈⾸单¥19.9
3256 人已学习
课程目录
已更新 46 讲 / 共 53 讲
0/4登录后,你可以任选4讲全文学习。
课前必读 (2讲)
开篇词 | 在真实世界的编译器中游历
免费
学习指南 | 如何学习这门编译原理实战课?
预备知识篇 (9讲)
01 | 编译的全过程都悄悄做了哪些事情?
02 | 词法分析:用两种方式构造有限自动机
03 | 语法分析:两个基本功和两种算法思路
04 | 语义分析:让程序符合语义规则
05 | 运行时机制:程序如何运行,你有发言权
06 | 中间代码:不是只有一副面孔
07 | 代码优化:跟编译器做朋友,让你的代码飞起来
08 | 代码生成:如何实现机器相关的优化?
知识地图 | 一起来复习编译技术核心概念与算法
真实编译器解析篇 (19讲)
09 | Java编译器(一):手写的编译器有什么优势?
10 | Java编译器(二):语法分析之后,还要做些什么?
11 | Java编译器(三):属性分析和数据流分析
12 | Java编译器(四):去除语法糖和生成字节码
13 | Java JIT编译器(一):动手修改Graal编译器
14 | Java JIT编译器(二):Sea of Nodes为何如此强大?
15 | Java JIT编译器(三):探究内联和逃逸分析的算法原理
16 | Java JIT编译器(四):Graal的后端是如何工作的?
17 | Python编译器(一):如何用工具生成编译器?
18 | Python编译器(二):从AST到字节码
19 | Python编译器(三):运行时机制
20 | JavaScript编译器(一):V8的解析和编译过程
21 | JavaScript编译器(二):V8的解释器和优化编译器
22 | Julia编译器(一):如何让动态语言性能很高?
23 | Julia编译器(二):如何利用LLVM的优化和后端功能?
24 | Go语言编译器:把它当作教科书吧
25 | MySQL编译器(一):解析一条SQL语句的执行过程
26 | MySQL编译器(二):编译技术如何帮你提升数据库性能?
热点问题答疑 | 如何吃透7种真实的编译器?
期中复习周 (3讲)
划重点 | 7种编译器的核心概念与算法
期中考试 | 这些编译原理知识,你都掌握了吗?
用户故事 | 易昊:程序员不止有Bug和加班,还有诗和远方
不定期加餐 (3讲)
不定期加餐1 | 远程办公,需要你我具备什么样的素质?
不定期加餐2 | 学习技术的过程,其实是训练心理素质的过程
不定期加餐3 | 这几年,打动我的两本好书
现代语言设计篇 (10讲)
27 | 课前导读:学习现代语言设计的正确姿势
28 | 前端总结:语言设计也有人机工程学
29 | 中端总结:不遗余力地进行代码优化
30 | 后端总结:充分发挥硬件的能力
31 | 运行时(一):从0到语言级的虚拟化
32 | 运行时(二):垃圾收集与语言的特性有关吗?
33 | 并发中的编译技术(一):如何从语言层面支持线程?
34 | 并发中的编译技术(二):如何从语言层面支持协程?
35 | 并发中的编译技术(三):Erlang语言厉害在哪里?
36 | 高级特性(一):揭秘元编程的实现机制
编译原理实战课
15
15
1.0x
00:00/00:00
登录|注册

35 | 并发中的编译技术(三):Erlang语言厉害在哪里?

宫文学 2020-09-02
你好,我是宫文学。
在前面两讲,我们讨论了各门语言支持的并发计算的模型。线程比进程更加轻量级,上下文切换成本更低;协程则比线程更加轻量级,在一台计算机中可以轻易启动几十万、上百万个并发任务。
但不论是线程模型、还是协程模型,当涉及到多个线程访问共享数据的时候,都会出现竞争问题,从而需要用到锁。锁会让其他需要访问该数据的线程等待,从而导致系统整体处理能力的降低。
并且,编程人员还要特别注意,避免出现死锁。比如,线程 A 持有了锁 x,并且想要获得锁 y;而线程 B 持有了锁 y,想要获得锁 x,结果这两个线程就会互相等待,谁也进行不下去。像数据库这样的系统,检测和消除死锁是一项重要的功能,以防止互相等待的线程越来越多,对数据库操作不响应,并最终崩溃掉。
既然使用锁这么麻烦,那在并发计算中,能否不使用锁呢?这就出现了 Actor 模型。那么,什么是 Actor 模型?为什么它可以不用锁就实现并发?这个并发模型有什么特点?需要编译技术做什么配合?
今天这一讲,我们就从这几个问题出发,一起学习并理解 Actor 模型。借此,我们也可以把用编译技术支持不同的并发模型的机制,理解得更深刻。
首先,我们看一下什么是 Actor 模型。

什么是 Actor 模型?

确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/1000字
划线
笔记
复制
© 版权归极客邦科技所有,未经许可不得传播售卖。 页面已增加防盗追踪,如有侵权极客邦将依法追究其法律责任。
该试读文章来自付费专栏《编译原理实战课》,如需阅读全部文章,
请订阅文章所属专栏新⼈⾸单¥19.9
立即订阅
登录 后留言

精选留言(2)

  • 顾仲贤
    小骄傲一下,本人在WhatsApp工作,目前所有的Infra还是用Erlang搭建的微服务,很稳定。当初被Facebook收购时,只有不到30个engineer(Infra就更少了)来maintain1.4B的月活,这就是Erlang的厉害之处吧。

    作者回复: 有些有个性的公司,会故意使用比较小众的语言,来过滤出比较牛的工程师。我还知道有个公司用ocaml做开发,这样招聘到的就是真正喜欢函数式编程的工程师。

    Erlang是如此。Erlang如果理解了它的精髓,翻过学习墙以后,会让工程师更省事。比如,函数式编程,消除了很多由于状态管理不善导致的问题等。算总账下来,使用Erlang这种语言更划算。

    就像学技术,把编译原理、算法这些看似难的知识学会,其实总体来说更“划算”!

    2020-09-04
    1
  • myrfy
    在仪器仪表领域很流行的labview虚拟仪器开发环境中,labview的运行时感觉就是一个actor模型,每个图标节点之间通过连线表示的通道传递数据

    作者回复: 感谢分享领域经验!学到了!

    2020-09-02
收起评论
2
返回
顶部