Linux___5种I/O模型(再探讨)

5种I/O模型图解I/O模型 、Linux网络I/O模型

一、I/O操作为什么分两个阶段:

在这里以I/O输出为例进行说明:

  • 等待数据准备好;
  • 将数据从内核空间复制到应用进程缓冲区。

首先我们要对经典的4G虚拟地址空间有一定的了解——3G用户,1G内核。困惑我比较长的时间的就是1G内核空间到底是某个进程所独有的还是所有进程共有的?今天灵感突现,举一个非常恰如其分的例子——公共物品。公共物品人人可用,但是没有任何个人对其拥有所有权。可以理解为1G的内核空间是某进程独占的,也可以理解为所有进程共享的。

引出4G虚拟地址空间有什么用意呢?内核负责接收数据,存放在内核缓冲区中,然后数据从内核流向应用进程。这种处理流程使人倍感亲切,把事务处理分的清汤绿水的:内核光负责接收数据,应用进程光负责处理数据,各司其职高效工作。

二、同步和异步到底区别在哪

  • 如果在ta时刻,I/O事件发生,称之为同步。应用进程感知后,需要耽误一些时间等待数据从内核流向应用进程,而这一过程是阻塞的。
  • 如果再tb时刻,I/O事件发生,称之为异步。应用进程感知后,无需等待可以直接对采集到的数据进行处理。

一言以蔽之:I/O操作总是在事件发生之后才发生称为同步;I/O操作在事件发生之前发生,称为异步。

图2-1 I/O输入操作的两个阶段

三、不能将五种I/O模型割裂开来,应用中可能会同时使用两个或多个 

例如,非阻塞I/O的系统调用立即返回,如果光采用这一种的话,我们就需要采用轮询的方式。如果和信号驱动I/O结合起来,会达到一个更好的效果。

猜你喜欢

转载自blog.csdn.net/qq_41822235/article/details/86559529