Loading

I/O模型中的同步&异步-阻塞&非阻塞

I/O模型中:

  • 同步&异步:同步和异步关注的是消息通信机制

  • 阻塞&非阻塞:阻塞和非阻塞关注的是程序在等待调用结果时的状态

张三爱喝茶,烧水泡茶。

  1. 张三把水壶放火上,立等水开。(同步阻塞)
  2. 张三把水壶放火上,去客厅看电视,时不时去厨房看水开没有。(同步非阻塞)

张三买了个智能水壶,烧开后铃声提示。

  1. 张三把智能水壶放火上,立等水开。(异步阻塞)
  2. 张三把智能水壶放火上,去客厅看电视,水壶响之前不再去看它了,响了再去拿壶。(异步非阻塞)

同步&异步,只是对水壶(被调用)而言。普通水壶——同步。智能水壶——异步。智能水壶能自己干完活后提示张三水开了,普通水壶智能让张三去轮询查看(造成张三效率低下)。

阻塞&非阻塞,仅仅对于老张(调用者)而言。 立等的张三——阻塞;看电视的张三——非阻塞。

一般异步是配合非阻塞使用的,这样才能发挥异步的效用。

从理论上说,阻塞I/OI/O复用以及信号驱动I/O都是同步I/O模型

异步I/O的读写操作总是立即返回,而不论I/O是否是阻塞的,因为真正读写操作已经由内核接管。

同步I/O模型要求用户代码自行执行I/O操作,而异步I/O机制由内核来执行I/O操作。即,同步I/O向应用程序通知的是I/O就绪事件,异步I/O向应用程序通知的是I/O完成事件


I/O模型 读写操作和阻塞阶段
阻塞I/O 程序阻塞与读写函数
I/O复用 程序阻塞于I/O复用系统调用,但可以同时监听多个I/O事件,对于I/O本身的读写操作是非阻塞的。
SIGIO信号 信号触发I/O就绪事件,用户程序执行读写操作。程序没有阻塞阶段。
异步I/O 内核执行读写操作并触发I/O完成事件。程序没有阻塞阶段。
posted @ 2021-01-25 14:37  JakeLin  阅读(90)  评论(0编辑  收藏  举报