zoukankan      html  css  js  c++  java
  • I/O模型浅析总结

    参考:
     
     
    一般而言,一次I/O分为两个阶段:
    一是,“等待数据”,内核等待数据从磁盘加载到内核内存;
    二是,“等待复制完成”,数据从内核内存复制到进程内存;
     
    阻塞:进程发起I/O调用,未完成之前,当前进程会被挂起。
    非阻塞:进程发起I/O调用,被调用函数完成之前不会阻塞当前进程而是立即返回。
    注意:以上是针对于调用者如何被处理的角度。
     
    同步:进程发起一个过程调用(功能、函数)后,在没得到结果之前,该调用将不会返回。
    异步:进程发起一个过程调用,即便调用者不能立即得到结果,但调用却会返回,返回一个未完成状态,当调用完成后,内核会自行通知调用者已经OK。
    注意:以上是针对于被调用者如何响应请求者的调用。
     
    内存映射:mmap(解决I/O第二阶段的内核内存数据复制到进程内存的等待过程)
     
    I/O模型:
     
    同步
    同步阻塞:I/O两个阶段均阻塞
    同步非阻塞:I/O一阶段非阻塞(盲等待),二阶段阻塞
    I/O复用  select()、poll():I/O两阶段均阻塞,但是该模型能同时响应多个I/O请求
     
    异步
    事件驱动 epoll() 、wqueue():I/O一阶段非阻塞,二阶段阻塞
          边缘触发(一次通知)
          水平触发(多次通知)
    AIO(异步非阻塞):I/O两阶段均非阻塞
     
    SystemV:poll()、epoll()
    BSD:select()、wqueue()
     
    Nginx支持事件驱动epoll、边缘触发以及mmap机制。
     
     
  • 相关阅读:
    Java入门(6)方法
    重构改善已有代码
    .NET面试题系列(八)电商瞬时抢购的方案
    .NET面试题系列(七)IIS
    设计模式综述
    基于ELK5.1(ElasticSearch, Logstash, Kibana)的一次整合测试
    acl.go
    单机部署-consul
    baseFileWriter.go
    config.go
  • 原文地址:https://www.cnblogs.com/wplvqj/p/10537249.html
Copyright © 2011-2022 走看看