httpd服务归纳:浅谈I/O模型

1. 四种理论的I/O模型 

    1) 调用者(服务进程):

        阻塞:  进程发起I/O调用,如果调用为完成,进程被挂起休眠,不能再执行其他功能

        非阻塞:进程发起I/O调用,被调用的函数完成之前,依然可以执行其他功能

    2) 被调用函数或过程(系统调用I/O读写操作)

        同步: 函数或功能被进程调用时,不立即返回值,直到此调用完成 

        异步: 函数或功能被进程调用时,不能立即完成则返回未完成状态,完成后通知调用进程

    3)四中理论模型

         同步阻塞 

         同步非阻塞(几乎没人使用)

         异步阻塞 

         异步非阻塞: 真正的异步I/O 

    

2. 五种网络服务中的I/O模型  

    1) 同步阻塞模型

        工作进程调用I/O请求库函数后,工作进程被阻塞等待I/O完成第一阶段,数据从硬盘加载到内核空间,此时工作进程在库函数返回数据之前继续被阻塞参与完成第二阶段数据从内核空间复制到用户进程空间的过程,最后拿到数据。 

同步阻塞.png

    2)I/O复用(同步阻塞模型):select(), poll()

         工作进程调用一个管理I/O的特殊库函数,此库函数可以接受并管理多个I/O请求,工作进程则可以同时等待多个I/O请求,虽然是阻塞,但是阻塞在多个进程上,可以提高效率。第二阶段依然需要工作进程参与库函数把内核空间数据复制到用户空间,第二阶段依旧阻塞。 

IO复用模型.png

    3) 同步非阻塞(盲等待模型)

            工作进程调用I/O库函数,工作进程不需要I/O完成依旧可以处理其他事物,但是需要反复查看I/O是否完成。第二阶段依然需要工作进程参与库函数把内核空间数据复制到用户空间,第二阶段依旧阻塞。 

        

同步非阻塞.png

    4) 事件触发模型(同步非阻塞): epoll(), kqueue() 

        工作进程调用I/O库函数,工作进程不需要等待I/O完成,内核空间I/O完成后会通过事件通知进程。第二阶段依然需要工作进程参与库函数把内核空间数据复制到用户空间,第二阶段依旧阻塞。  

事件驱动(同步非阻塞).png

    5) 全异步:AlO 调用

        全异步1: 工作进程调用I/O库函数,工作进程不需要等待I/O完成,内核空间I/O完成后会通过事件通知进程。第二阶段不需要工作进程参与库函数把内核空间数据复制到用户空间,库函数完成复制后自行返回数据给工作进程

异步非阻塞.png

        全异步2: 工作进程调用I/O库函数,工作进程不需要等待I/O完成,内核空间I/O完成后会通过事件通知进程。第二阶段不需要库函数从内核空间复制数据,而是通过内存映射来实现(mmap)。 

mmap.png

        实现以上功能,libevent   库 

         libevent.png

原创文章,作者:以马内利,如若转载,请注明出处:http://www.178linux.com/4811

(0)
以马内利以马内利
上一篇 2015-05-27
下一篇 2015-05-28

相关推荐

  • 马哥教育网络班21期+第14周课程练习

    系统的INPUT和OUTPUT默认策略为DROP; iptables -P INPUT DROP iptables -P OUTPUT DROP 1、限制本地主机的web服务器在周一不允许访问;新请求的速率不能超过100个每秒;web服务器包含了admin字符串的页面不允许访问;web服务器仅允许响…

    Linux干货 2016-10-09
  • 计算机基础与Linux初识

    一、 计算机的组成及其功能。      计算机五大组成部件:运算器、控制器、存储器、输入设备、输出设备。其中CPU主要由运算器及控制器组成。      1、运算器:进行算数运算、逻辑运算,对数据进行加工处理。      2、控制器…

    2017-07-02
  • Tomcat基础及常见使用入门

    Tomcat的简单介绍,安装,以及简单的配置运用

    2017-09-11
  • find和grep命令练习

                                    find和grep命令练习 1、显示当前系统上root,fedora,或user1用户的默认shell; ~]# cat /etc/pa…

    Linux干货 2016-10-23
  • btrfs管理及应用

    一、btrfs的命令选项     mkfs.btrfs         -L 'LABEL' 指定卷标         -d <type&…

    Linux干货 2016-03-12

评论列表(2条)

  • 以马内利
    以马内利 2015-05-27 11:15

    各位大神见谅,非专业出身,I/O 模型实在不知道怎么表现才真正准确,自己也很浅

  • clover
    clover 2015-06-12 07:52

    已经很棒了