In [1]:
from mosaic import *
OS2023(11)
11. 真实世界的并发编程¶
Changelog & 反馈
- 反馈:万能同步方法中的 broadcast v.s. signal
- 上课仅仅起到 “导读” 的作用;阅读教科书 + 做实验是真正掌握操作系统的必要途径:只有实际理解程序 (状态机) 的执行,才真正 “会编程”。这是目前人类和 LLM 唯一的差距
- 实验:难度、Online Judge 和 academic integrity
背景回顾:我们已经掌握了多种并发控制技术:自旋锁、互斥锁、条件变量、信号量。我们已经可以实现共享内存系统上的任意并发/并行计算。然而,大家也在使用这些 “底层” 并发控制时发现使用的困难。那么,真实世界的程序员是怎么实现并发程序的?
本讲内容:(本次课为科普,不需要掌握相关编程技术) 并发编程模型与底层同步机制的封装
- 高性能计算中的并行编程 (embarrassingly parallel 的数值计算)
- 数据中心中的并发编程 (协程、Goroutine 和 channel)
- 人工智能时代的分布式机器学习 (GPU 和 Parameter Server)
- 用户身边的并发编程 (Web 和异步编程)
In [2]:
slideshow('11.1')
In [3]:
demo('mandelbrot', 'c/mandelbrot.c', libs=['thread.h'])
In [4]:
slideshow('11.2')
In [5]:
demo('goroutine', 'c/go')
In [6]:
slideshow('11.3')
In [7]:
demo('mandelbrot-cuda', 'c/mandelbrot')
In [8]:
slideshow('11.4')
Take-away Messages¶
(本讲为科普内容,不要求掌握实际代码编写)
- 计算图并发编程的真实应用场景
- 高性能计算 (注重任务分解):生产者-消费者 (MPI/OpenMP)
- 数据中心 (注重系统调用):线程-协程 (Goroutine)
- 人工智能:高性能计算 + 数据中心
- 人机交互 (注重易用性):事件-流图 (Promise)
- 编程工具的发展突飞猛进
- 开源社区和人工智能彻底改变了计算机科学的学习方式
- 选择你的主力现代编程语言:Modern C++, Rust, Javascript, Scala/Kotlin/Java, ...
课后习题/编程作业¶
1. 阅读材料¶
教科书 Operating Systems: Three Easy Pieces:
- 第 33 章 - Event-based Concurrency