zoukankan      html  css  js  c++  java
  • 【Linux】Linux系统5种IO模型

    Linux下的五种IO模型

      1.阻塞IO(blocking IO)

      2.非阻塞IO (nonblocking IO)

      3.IO复用(select 和poll) (IO multiplexing)

      4.信号驱动IO (signal driven IO (SIGIO))

      5.异步IO (asynchronous IO (the POSIX aio_functions))

         前四种都是同步,只有最后一种才是异步IO。

      

    同步阻塞I/O

      同步阻塞IO中,进程的等待时间可能包括两个部分,一个是等待数据就绪,比如等待数据可以读和可以写;另一个是等待数据的复制,当数据准备好后,读写操作的耗时。

      同步非阻塞IO的调用的区别在于,不会去等待数据的就绪,如果数据不可读或者不可写,相关系统调用会立即告诉进程(立即返回)。 比如使用非阻塞recv()接受网络数据后,函数就及时返回,告诉进程没有数据可读了。

    其好处是如果结合反复轮询来尝试数据是否就绪,那么在一个进程里可以同时处理多个IO操作。问题在于需要进程来轮询查看数据是否就绪,进程处于忙碌等待状态。

    非阻塞IO一般只针对网络IO有效,当我们在socket的选项设置中使用O_NONBLOCK时,这个socket的send()或者recv()就会采用非阻塞方式。 对于磁盘IO非阻塞IO并不产生效果。

  • 相关阅读:
    java架构之路-(面试篇)Mysql面试大全
    web工程的路径问题详解
    SQL知识点总结
    Mybatis简介
    mysql大全
    配置心得
    spring4.1.3+springmvc+mybatis3.2.1整合
    jstl标签
    jstl标签库
    Java并发控制机制
  • 原文地址:https://www.cnblogs.com/songgj/p/9010193.html
Copyright © 2011-2022 走看看