阻塞/非阻塞
:关键词循环
、检查
,用于描述 程序在等待调用结果(消息,返回值)时的状态同步/异步
:关键词通知
,用于描述 程序在调用之后是否为立即响应,然后接收任务完成后的通知并发/并行
:关键词时间
、时刻
,用于描述 多个程序是否会在同一时刻执行
在处理 IO 的时候,阻塞和非阻塞都是同步 IO。
并发
同一时刻只有一个任务在执行,CPU不断的切换任务,在一个时间段内,看起来是多个任务都在执行
A | ■■■□□□□□□■■■□□□□□□
B | □□□■■■□□□□□□■■■□□□
C | □□□□□□■■■□□□□□□■■■
并行
同一时刻多个任务在同时执行
A | ■■■■■■■■■■■■■■■■■■
B | ■■■■■■■■■■■■■■■■■■
C | ■■■■■■■■■■■■■■■■■■
用一个伪代码解释
以下伪代码并不严格,参考即可
1 | // 并行/并发(该任务是否是同一时刻执行) |
一个‘老张爱喝茶’故事
同步阻塞
老张把水壶放到火上,站在旁边等水开
同步非阻塞
老张把水壶放到火上,去客厅看电视,时不时去厨房看看水开没有
老张心想老是去看水有没有开,太麻烦了,于是买了一个会响的水壶。
异步阻塞
老张把响水壶放到火上,站在旁边等 壶 响
异步非阻塞
老张把响水壶放到火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶
并发
老张要煮两壶水,但是只有一个炉灶,一会烧这壶,一会烧那壶
并行
老张要煮两壶水,嫌一个炉灶太慢了,又买了一个,这次可以两个一起煮了