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

相关推荐

  • Linux之查找命令find简介

    查找命令find简介    Linux使用过程中难免会遇到查找功能,类似于Windows中的搜索功能,如果想要找某个文件在什么地方,什么格式的文件等等。在Linux中我们可以使用find、locate、which、whereis等命令。接下来我们就简单说一下如何使用这几个命令查找文件。 一、which which命令的作用是,在PATH变…

    Linux干货 2015-05-18
  • 文本处理工具

    1, head  默认显示前十行 -n  +行号 显示前n行 -行号 显示前n行 -c 字节数 显示前n个字节 tail 默认显示后十行 -n +行号 显示后n行 – 行号 显示后n行 -f 动态显示 cut -d 指定分隔符 -f 选取第几列 –output-delimiter 指定输出符 相关的实际操作: a,…

    2017-07-29
  • lvm逻辑卷管理

    #LVM 逻辑卷管理 一、创建pv        创建pv可以在物理硬盘(裸盘上创建),MBR类型的分区(要更改分区类型为linux lvm: 8e )。GPT分区也要更改分区类型为8e00 Linux LVM 。    还可以在RAID上创建。注意要在没有数据的分区上…

    Linux干货 2016-09-02
  • AWK 的用法

    目录: 一、概述 二、awk基本语法格式 三、awk基本操作 四、awk条件及循环语句 五、awk函数 六、awk演示示例(源自于man手册) 一、概述 产品概述:  awk是一种编程语言,用于在linux/unix下对文本和数据进行扫描与处理。数据可以来自标准输入、文件、管道。&nbsp…

    Linux干货 2017-05-30
  • 1017练习题

    1017练习题 作业 10月17日 柴震 1.生产环境发现一台服务器系统时间产生偏差,造成服务异常,请帮忙校正。 hwclock 查看硬件是否准确,如准确无误,可以使用hwclock -s以硬件时间为准。 或者使用ntpdate命令指定一台NTP服务器,进行同步。 2.生产有一个数据同步脚本需要执行很长时间,怎样做到无人值守,在…

    Linux干货 2016-10-18
  • 二叉树的应用详解 – 数据结构

    概述: 平衡树——特点:所有结点左右子树深度差≤1 排序树——特点:所有结点“左小右大字典树——由字符串构成的二叉排序树判定树——特点:分支查找树(例如12个球如何只称3次便分出轻重)带权树——特点:路径带权值(例如长度) 最优树——是带权路径长度最短的树,又称 Huffman树,用途之一是通信中的压缩编码。 1. 二叉排序树(二叉查找树 Bina…

    Linux干货 2015-04-07

评论列表(2条)

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

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

  • clover
    clover 2015-06-12 07:52

    已经很棒了