Hello World

IO模型

【参考文章】:如何给女朋友解释什么是IO中的阻塞、非阻塞、同步、异步?

【参考文章】:【NIO系列】——之IO模型

1. 阻塞和非阻塞 , 同步和异步

1.1 阻塞和非阻塞

  调用方是否需要等待直到调用返回

  阻塞:指的是调用方进行调用之后一直等待别的事情什么都不做。

  非阻塞:指的是调用方调用之后先去忙别的事情。

1.2 同步和异步

  调用结果的获取方式

  同步:进程自己负责IO操作,将数据从系统内核拷贝到用户程序的缓冲区;

  异步:操作系统负责IO操作,将数据从系统内核拷贝到用户程序的缓冲区,并通知程序。

2. Linux下五种IO模型

  一个IO操作一般分为两部分:

  1. 进程进行系统调用 recvfrom,等待返回数据;
  2. 数据返回后,系统内核将数据拷贝到进程空间。

2.1 阻塞式IO

  IO调用后,等待数据返回后,将数据从内核拷贝到缓冲区;

  拷贝数据的过程是阻塞的。

  

 

2.2 非阻塞式IO

  在IO调用后,一直去轮询结果。只能监听一个 socket。

  拷贝数据的过程是阻塞的。

  

 

2.3 多路复用IO

  在IO调用后,一直去轮询结果。一个 select 可以监听多个 socket ,有一个 socket 的 结果返回即可返回调用。

  拷贝数据的过程是阻塞的。

  

 

2.4 信号驱动式IO

  调用之后,当数据准备好后,系统通知程序,然后再拷贝数据。监听一个 socket。

  拷贝数据的过程是阻塞的。

  

 

2.5 异步IO

  调用后立即返回,数据准备好后系统将数据拷贝到进程的空间,然后通知程序。

  拷贝数据的过程不会阻塞。

 

 

posted @ 2018-08-30 10:15  小小忧愁米粒大  阅读(176)  评论(0编辑  收藏  举报
瞅啥瞅,好好看书