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

相关推荐

  • 高级文件系统管理之逻辑卷管理

    一,概述 逻辑卷管理器(LVM)     LVM: Logical Volume Manager, Version:2          dm:device mapper (设备映射),将一个或多个底层块设备组织成一个逻辑设备的模块 &nb…

    Linux干货 2016-09-10
  • grep虐我千百遍,我待grep如初恋

    N21第四周博客作业 1、  复制/etc/skel目录为/home/tuser1,要求/home/tuser1及其内部文件的属组和其它用户均没有任何访问权限。 [root@Centos6 ~]# cp -r /etc/skel /home/tuser1 [root@Centos6 ~]#…

    Linux干货 2016-07-16
  • 正则表达式和grep用法,及文本查看、处理工具

    概念 正则表达式,又称正规表示式、正规表示法、正规表达式、规则表达式、常规表示法(英语:Regular Expression,在代码中常简写为regex、regexp或RE),是计算机科学的一个概念。正则表达式使用单个字符串来描述、匹配一系列匹配某个句法规则的字符串。在很多文本编辑器里,正则表达式通常被用来检索、替换那些匹配某个模式的文本。(维基百科) 通俗…

    2017-10-21
  • 在软raid10上使用LVM,并且进行磁盘配额,最后还原。

    实验环境 1)centos 7.3 2)lvm格式化的文件系统为ext4 3)磁盘为单一磁盘的不同分区 4)使用软件:mdadm,lvm2 tools,quota 软raid10的创建 一,两个raid1的创建 1)对磁盘进行分区,使用工具fdidk,每个大小为1GB,类型改为fd。我的分区情况:/dev/sda{6,7,8,9}将会拿来做为raid的磁盘。…

    Linux干货 2017-03-16
  • php-fpm

    1.安装 mariadb 服务 修改配置文件 2.musql 安全加强 3.安装 php-fpm php-mysql php-mbstring php-mcrypt 服务 修改配置文件 4.安装httpd服务 加虚拟主机配置文件 5.测试php网页 6.安装myadmin包及测试

    2017-06-04
  • 基于CentOS7实现LAMP(上)

    基于CentOS7实现LAMP(上)   情景模式: (1)php以模块方式运行  提供两个虚拟主机;                    &nbs…

    Linux干货 2016-08-22

评论列表(2条)

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

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

  • clover
    clover 2015-06-12 07:52

    已经很棒了