Erlang 编程语言的设计者 Joe Armstrong 曾经画过一张图,用来解释 Concurrency(并发)和 Parallelism(并行)的区别。
这张图很形象,我觉得它也可以用来解释这句话:Asynchrony(异步)和 Concurrency(并发)没有什么关系。
并发(单个咖啡店,多个队列):服务员在多个队列之间轮流服务,尽管不能同时为所有队列服务,但通过快速切换,能有效管理多个任务。
并行(多个咖啡店,各自队列):每个咖啡店有自己的服务员,能同时为各自队列的客人服务,实现真正的同时处理多个任务。
异步(客人点单后可做其他事):客人点单后不必等待,而是可以做其他事情,比如阅读报纸或查看手机,当咖啡准备好后,服务员会通知你,你可以过来取咖啡。这种方式允许客人在等待期间最大限度地利用自己的时间。
并发主要关注于任务的管理和调度。在并发环境中,可以同时处理多个任务,不论是通过时间片轮转在单核处理器上,还是在多核处理器上。
异步主要关注于提高程序在等待(通常是 I/O 操作)期间的效率。异步允许程序在等待一个操作完成的同时继续执行其他代码,从而避免阻塞。
异步编程本质上与并发(多任务同时进行)无关,而是关注于单个任务在等待时的处理方式。
W WH 系列文章列表:
[1]
[2]
[3]
[4]
[5]
[6]
最近文章列表:
[1]
[2]
[3]
[4]
[5] ?
[6]
?
[7]
[8]
[9]
[10]
[11]
[12]
[13]