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 10:05
下一篇 2015-05-28 09:41

相关推荐

  • Linux终端类型

    Linux系统的终端主要包括控制台终端、控制终端、串口终端、伪终端、虚拟终端。 1、控制台终端(/dev/console)    在Unix系统中,计算机显示器通常被称为控制台终端。Console与虚拟终端相关联,内核将信息送到控制台终端上(/dev/console), 通过与console相关联的虚拟终端将信息显示到屏幕上。不管当前正在…

    Linux干货 2016-10-19
  • HA Cluster:keepalived

    HA Cluster 集群类型:LB(lvs/nginx(http/upstream, stream/upstream))、HA、HP 系统可用性的公式:A=MTBF/(MTBF+MTTR) 系统故障: 硬件故障:设计缺陷、wear out、自然灾害 软件故障:设计缺陷 提升系统高用性的解决方案之降低MTTR: 解决方案:冗余(redundant) acti…

    Linux干货 2017-06-26
  • 高级文件系统管理 之RAID

    高级文件系统管理 之RAID 软RAID  mdadm:为软RAID提供管理界面                  为空余磁盘添加冗余       &nb…

    Linux干货 2016-08-30
  • Linux基础之—基础权限和特殊权限以及FACL权限管理

    Linux是多用户多任务的操作系统,了解掌握Linux的权限分配机制,也是管理Linux系统安全的基础之一。 文件目录的权限格式如下:   1.其中权限位可以看对象到是一个9个占位符,其实分为三位一组: (1) 第一组:对应的是文件或目录的所有者属主权限。owner (2) 第二组:对应的是文件或目录的所属组权限。group (3) 第三组:对应的…

    Linux干货 2016-08-07
  • N26-博客作业-week3

    1、列出当前系统上所有已经登录的用户的用户名,注意:同一个用户登录多次,则只显示一次即可。 ~]# who | cut -d” ” -f1 | sort -u 2、取出最后登录到当前系统的用户的相关信息。 ~]# last -n 1 3、取出当前系统上被用户当作其默认shell的最多的那个shell。 ~]# cut /etc/pas…

    Linux干货 2017-02-19
  • shell脚本之测试命令(test、[])

    话不多说,直接开车 在编写shell脚本中,我们经常需要判断命令执行的正确与否,从而进行不同的操作。首先我们来介绍下条件性的执行操作符:根据退出状态而定,命令可以有条件地运行。其中,利用echo的话方便我们对测试结果的查看。 (1)&& 代表条件性的AND THEN 可以理解为短路与:当&&前面命令为真时,执行&am…

    Linux干货 2017-08-05

评论列表(2条)

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

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

  • clover
    clover 2015-06-12 07:52

    已经很棒了