<aside> <img src="notion://custom_emoji/c233e7bc-acd0-812b-a811-00030dcd1edc/29e3e7bc-acd0-808e-ac64-007a3fac687d" alt="notion://custom_emoji/c233e7bc-acd0-812b-a811-00030dcd1edc/29e3e7bc-acd0-808e-ac64-007a3fac687d" width="40px" />
比如一家咖啡店的一名咖啡师(一个 CPU 核心):
你只有一个人,但你需要同时处理三件事:
你不可能 同时 做这三件事。但你可以在它们之间快速切换:
你先花 10 秒给 A 点单(执行任务 A)。
然后你按下咖啡机按钮,开始煮咖啡(执行任务 B)。在咖啡(I/O 操作)煮的 30 秒里,你不需要盯着它。
你利用这 30 秒空隙,去给 C 打包(执行任务 C)。
打包
(执行任务 A)。
在顾客看来,你似乎在同时为他们服务,这就是并发。
在微观上,你(CPU 核心)在任何一个确切的瞬间,都只在做一件事。你通过在不同任务间切换(上下文切换)来管理多项任务。
现在店里很忙,老板又请了一名咖啡师。你们俩(两个 CPU 核心)现在可以真正同时工作:
这就是并行。两个(或更多)任务在物理上的同一瞬间被同时执行。