美文网首页
Unix的五种IO模型

Unix的五种IO模型

作者: 听一首老歌 | 来源:发表于2018-12-03 10:45 被阅读0次

    1,Blocking IO 阻塞IO

    通过recvfrom系统调用,检查是否就绪

    IO读取分为两个阶段,第一阶段准备数据 ,第二阶段 处理数据包 拷贝到用户空间

    IO执行的两个阶段都被Blocking了

    2,Non Blocking IO  非阻塞IO

    调用recvfrom时候,不会阻塞线程而是直接返回(错误或者准备就绪)

    应用需要不断调用recvfrom去检查(polling)

    用户需要不断询问IO是否准备就绪。

    为了避免CPU空转,引入了代理select,后来又有poll代理

    系统空闲时候会将线程阻塞掉,当有一个或者多个流IO时间时候,将会唤起当前线程,于是会轮询所有的IO流。

    缺点:需要无差别轮询所有的流,找出能够读写的流。处理的流越多,耗费的无差别轮询时间越长\

    epoll可以理解为event poll,会通知我们是那个流发生了怎么样的事件

    3,IO 多路复用

    通过一种机制,一个进程可以同时等待多个文件描述符,任意一个文件描述进入就绪状态,select函数就会返回。

    处理连接数很多的情况下,优势比较明显。

    4,信号驱动IO

    信号通知,数据包已经准备好被处理,数据报已经准备好被读取

    5,异步IO

    信号驱动IO告诉我们何时可以启动一个IO操作,异步IO则由内核通知IO操作何时完成,其他都交给内核处理。

    同步IO,IO操作将会被阻塞,non-blocking IO在第一阶段不会阻塞IO,但是第二阶段,从内核拷贝到用户内存,进程会被阻塞。所以仍然是同步IO

    异步IO,IO操作不会被阻塞

    参考:https://www.jianshu.com/p/f00ad612153b

    相关文章

      网友评论

          本文标题:Unix的五种IO模型

          本文链接:https://www.haomeiwen.com/subject/wtwecqtx.html