Skip to content

无畏并发延申

并发

并发(Concurrency)是指在同一时段内管理多个任务的进度,实现任务之间的"交替推进".对于单核 CPU,操作系统通过时间片轮转让多个任务轮流运行,表现为"同一时间段内多个任务共同推进",但每个时刻只有一个任务在真正运行.对于多核 CPU,并发可以通过并行来实现,也可以单核轮转.

并发类比:一个人轮流处理多个任务,比如边烧水边写作业,但每次只专注于一件事情,不断来回切换.

并行

并行(Parallelism)是指在物理上多个任务真正同时进行.通常要求多核 CPU,每个核心可以独立处理一个任务.

并行类比:多个人在同一时间分别完成自己的任务,真正"同时"进行.

异步

异步(Asynchronous)是指发起某项操作后无需等待其完成,可以继续执行后续代码.异步关注任务调度和等待期间的非阻塞,而与是否多线程、并发或并行无关.单线程也可以有异步机制.

举例:你下单点外卖(异步请求),不用等外卖送到再干别的,可以先去学习,送到了再通知你.

同步

同步(Synchronous)是指执行某项操作时,必须等待操作完成后才能继续下一步.线程(或任务)会阻塞,直到结果返回.

举例:你打电话订外卖,直到商家确认完毕再挂电话、继续做别的事.

无畏并发

无畏并发(Fearless Concurrency)是 Rust 提出的理想:通过严格的类型系统和内存安全检查,编写并发代码时,能大大降低数据竞争、死锁等常见并发问题.即使新手也能用 Rust 写出安全的并发代码,无需"胆战心惊".

线程安全

线程安全(Thread Safety)是指同一份数据由多个线程访问时,程序的行为是可预期且不会出现数据竞争、死锁等问题.

数据竞争

数据竞争(Data Race)是指至少有两个线程:

  • 同时访问同一内存位置,
  • 并且至少有一个线程在写,
  • 且这些线程之间没有适当的同步措施.

数据竞争会导致未定义行为和程序难以调试的 Bug.

死锁

死锁(Deadlock)是指多个线程互相等待对方释放资源,产生永久互等,导致程序无法继续执行.

竞态条件

竞态条件(Race Condition)泛指程序正确性依赖于多个线程的时序,线程间的执行顺序不同会导致不同的运行结果.数据竞争是一种最危险的竞态条件.

互斥锁

互斥锁(Mutex, Mutual Exclusion)是一种用于保护共享资源的同步原语.它确保同一时刻最多只有一个线程能访问被保护的数据.

信号量

信号量(Semaphore)是另一种同步原语,用于控制多个线程同时访问某一资源的数量.与互斥锁只能有一个持有者不同,信号量可以限制允许访问资源的线程数.

条件变量

条件变量(Condition Variable)用于线程间的协调和等待机制.当某个条件未满足时,线程可以阻塞等待,有其它线程通知条件满足后再被唤醒.它本身不保护资源,通常要和互斥锁配合使用.

基于 MIT 协议发布