配置httpd2.4与常见的I/O模型说明

                                        作者:尹正杰

版权声明:原创作品,谢绝转载!否则将追究法律责任。

一.httpd2.4访问控制
1.基于IP访问控制:
  允许所有主机访问:Require all granted
  拒绝所有主机访问:Require all deny
  基于IP控制某主机的访问
    Require ip IPADDR
    Require not ip IPADDR
    IPADDR:
    单个IP地址,例如172.16.100.7
    network/netmask 例如172.16.0.0/255.255.0.0
    network/Length 例如172.16.0.0/16
    Net 172.16
    完整写法:Require ip 172.16.0.0/16 (表示允许172.16.0.0/16网段访问)
配置实例如下
[root@yinzhengjie ~]# more /yinzhengjie/etc/http24/httpd.conf
DocumentRoot "/yinzhengjie/apache/htdocs"
<Directory "/yinzhengjie/apache/htdocs">
Options None
AllowOverride None
Require ip 192.168.1.0/24
</Directory>
.......
[root@yinzhengjie ~]#
2.基于域名控制某主机的访问
  允许所有主机访问: Require host HOSTNAME
  拒绝所有主机访问: Require not host HOSTNAME
  HOSTNAME:
    FQDN:具体的主机
    DOMAIN:域名,例如:yinzhengjie.org.com
 
 
 
 
二.I/O模型:
调用者如何被处理的:
a>.阻塞:
  进程发起I/O调用,未完成之前,当前进程会被挂起(意味着你不能执行其他的操作);
b>.非阻塞:
  进程发起I/O调用,被调用函数完成之前不会阻塞当前进程而是立即返回(意味着在这个调用完成之前,你可以干其他的事情);
 
被调用者如何响应请求者的调用的:
a>.同步:
  进程发起一个过程调用(功能、函数)调用后,在没得到结果之前,该调用将不会返回;
b>.异步:
  进程发起一个过程调用,即便调用者不能立即得到结果,但调用却会返回,返回是未完成状态,当调用完成后,内核会自行通知调用者已经OK;
 
 
 
三.常见的I/O模型
1.同步阻塞
  当客户端需要访问一个服务端的资源时,我们称客户端为调用者,响应服务的为被调用者。而资源都是存放在磁盘的,服务端请求数据时,服务端不会直接去硬盘取数据,而是告诉内核它要访问的资源。然后内核从磁盘上取出来数据在内存中加载,然而加载出来的内存是属于内核专属的,这个时候进程的内存是没权限访问内核内存的,内核内存可以将数据拷贝到进程内存中。好了,让我们说一下内核将数据从磁盘加载到内核内存的这个过程我们叫做等待数据,而将数据从内核内存拷贝到进程内存的过程我们叫做等待复制的过程,等到复制完成后服务端就可以响应啦。而在这个过程中,调用者始终处于阻塞状态(也就意味着它不能干其它的事情了,一直等待服务端响应),因为它要等待数据加载到内存,然后从内存拷贝到服务端的进程内存去,最后再由服务端提供服务。而被调用者始终处于同步状态,因为它需要等待数据全部被加载到进程内存中去。

2.同步非阻塞
  这个过程并不是真正的非阻塞。我们刚刚说了客户单等待服务端响应需要两个过程,即等待数据和等待复制完成。而所谓的同步非阻塞就是服务端依然处于同步状态,而客户端可以一直做别的事情,比如客户端可以去抽根烟,逛一下朋友圈然后再去问一下内核是否加载数据完毕,如何内核说数据记载完也就意味着等待数据的步骤已经完成,接下来会将内核中的内存复制到进程内存中去。也就是等待复制完成的过程。此时服务端响应了第一个请求之后就会等待内存加载数据到进程内存,当第二个请求进来之后,它同样的会去请求内核做相同的步骤与此同时还会询问第一个请求的数据加载完成进度,如果加载完毕则服务端陷入阻塞状态,知道将第一个请求处理完毕之后才回去响应第二个请求。

3.I/O复用(系统调用select(),poll())
  我们知道客户端向服务端请求资源时,服务端会发起系统调用将数据从磁盘加载出来,加载过程分为两个阶段,一个是等待数据的阶段,一个是等待数据复制完成的阶段。但是这个过程是需要时间的,如果这个时候又一个程序可以帮我们做一件监控I/O状态的神器就好了,当这两个阶段完成之后自己标识一下,然后服务端来检查它的表示就知道哪个进程是现在可以处理的了,这样服务端就可以请求多个请求,而等待I/O操作的时间都是由这个监控工具给搞定的。这样服务端就不需要问每个进程的进度了,而是只问这个监控I/O状态的工具了就可以了,当这个进程是处于完成的状态时,服务端就可以操作这个进程I/O啦,从而增加了工作效率。这个道理就好像老师要统计班上的学生姓名,老师可以一个一个统计,也可以选出一个班长帮助他统计,然后班长将统计的表交个老师,而老师在这个过程中是可以干其它事情的。
 

4.事件驱动(系统调用epoll() ,wqueue())
  事件驱动就比较人性化了,它的意思是当客户端想要访问一个资源时,资源会从磁盘加载到内核内存,在这个加载过程中客户端时可以做其他的事情的,等到内核将数据从磁盘加载到内核内存之后,就会通知客户端加载完毕。然后由客户端自己协调将内核内存拷贝到进程内存的过程。在访问数据被加载到内核内存之后,内核可以只通知客户端一次,这种机制我们叫做边缘触发。当然内核也可以多次向客户端发送通知说数据以及成功记载到内核内存了的消息,这种机制我们称之为水平触发。这种模式就好像老板做晚饭,但是它会把饭放在柜台上需要我们自己去拿,等你拿到你的座位上就可以吃了。Nginx和httpd2.4版本都有event工作模式,就是用到了事件驱动的epoll()方法。
 
5.异步非阻塞(系统调用AIO)
  这种方式是最人性化的,它的意思是当客户端发起请求之后,客户端就可以做别的事情了,服务端需要等待数据和等待复制完成的过程,等到数据加载到进程内存之后才会去唤醒客户端。然后再和其进行操作。这种模式就好像我们去饭店叫碗饭。老板讲饭端在我们的桌上,我们只负责吃即可。
 

  异步非阻塞模式需要向把数据加载到内核内存,然后从内核内存复制一份到进程内存中去,这样明显降低了效率,如果有一种机制,只需要加载到内核内存,之后客户端就可以访问,这样的效果就非常good啦,当然,我们就可以基于内存映射的关系来实现,可以用nmap技术。
 
 
 
 
 

配置httpd2.4与常见的I/O模型说明的更多相关文章

  1. 在centos6编译配置httpd2.4的N种方法

    前言 我们使用linux的过程中,一定会用到httpd这个服务,在centos7上,默认安装的httpd就是2.4版本,大家都知道,2.4版本相对之前的版本已经做了改进,用起来更加方便,但是我们的ce ...

  2. 01-01java概述 doc命令、jdk\jre下载安装、path、classpath配置、开发中常见小问题

    1:计算机概述(了解) (1)计算机 (2)计算机硬件 (3)计算机软件 系统软件:window,linux,mac 应用软件:qq,yy,飞秋 (4)软件开发(理解) 软件:是由数据和指令组成的.( ...

  3. 关于配置httpd2.4.18+php5.6

    关于httpd2.4.18下载之前一直很烦php官网上的点半天看不到下载链接,直到看到这么几句话 大意是Apache http server 不提供二进制版本,只提供源代码.....如果你不能自己编译 ...

  4. 配置使用EF6.0常见的一些问题及解决方案

    前言 最近做了个winform小项目,为方便快速开发,后台框架使用了ef6.0+sqlserver2008架构,遇到各种问题,真是伤脑筋.现将遇到问题和解决方案写下来,方便查阅 提示未注册,找不到驱动 ...

  5. webpack常见的配置总结 ---只是一些常见的配置

    早期的构建工具grunt ,gulp 帮助我们配置一些开发环境,省去一些我们调试和重复的工作 现在我们的构建工具一般是webpack ,目前建议大家用3.0以上的版本 现在市场上比较优秀的构建工具,个 ...

  6. Xampp配置本地域名及常见错误解决

    本地域名配置 1.计算机-->C盘-->Windows-->System32-->drivers-->etc-->hosts 127.0.0.1       loc ...

  7. RBAC 几种常见的控制权限模型

    1. 几种常见的权限模型 2. ACL 和 RBAC 对比 3. RBAC 权限模型的优势 (1)简化了用户和权限的关系 (2).易于扩展 易于维护 4.优势(给权限和收回权限) 5.架构

  8. 小程序的目录结构/配置介绍/视图层wxml数据绑定/双线程模型/小程序的启动流程

    安装好微信小程序开发软件,创建项目 小程序文件结构和传统web对比 结构 传统web 微信小程序 结构 HTML WXML 样式 CSS WXSS 逻辑 Javascript Javascript 配 ...

  9. cips2016+学习笔记︱简述常见的语言表示模型(词嵌入、句表示、篇章表示)

    在cips2016出来之前,笔者也总结过种类繁多,类似词向量的内容,自然语言处理︱简述四大类文本分析中的"词向量"(文本词特征提取)事实证明,笔者当时所写的基本跟CIPS2016一 ...

随机推荐

  1. 解决Git在添加ignore文件之前就提交了项目无法再过滤问题

    由于未添加ignore文件造成提交的项目很大(包含生成的二进制文件).所以我们可以将编译生成的文件进行过滤,避免添加到版本库中了. 首先为避免冲突需要先同步下远程仓库 $ git pull 在本地项目 ...

  2. Java中isAssignableFrom()方法与instanceof()方法用法

    一句话总结: isAssignableFrom()方法是从类继承的角度去判断,instanceof()方法是从实例继承的角度去判断. isAssignableFrom()方法是判断是否为某个类的父类, ...

  3. Seay源代码审计系统的配置和安装

    2014年7月31日 Seay源代码审计系统2.1 时隔刚好一年之久,源代码审计系统再次更新,这次主要优化审计体验,优化了漏洞规则,算是小幅更新,原来使用者打开程序会提示自动更新. 1.优化原有规则, ...

  4. IDEA2018.1安装配置文档

    一.软件安装 1. 下载地址: https://www.jetbrains.com/idea/download/#section=windows 2. 安装: 点击.exe,选择安装路径,点击next ...

  5. DevOps on AWS之Cloudformation概念介绍篇

    Cloudformation的相关概念 AWS cloudformation是一项典型的(IAC)基础架构即代码服务..通过编写模板对亚马逊云服务的资源进行调用和编排.借助cloudformation ...

  6. A - 摆仙果

    题目描述 Adrian, Bruno与Goran三人参加了仙界的宴会,宴会开始之前先准备了一些仙果供三人品尝,但是仙果的摆放有顺序要求,如果把仙果摆错了位置,仙果就会消失而无法品尝到. 由于三人是第一 ...

  7. 《Linux内核设计与实现》读书笔记——第五章

    <Linux内核设计与实现>读书笔记--第五章 标签(空格分隔): 20135321余佳源 第五章 系统调用 操作系统中,内核提供了用户进程与内核进行交互的一组接口.这些接口让应用程序受限 ...

  8. Eat Style --proposed by Chongyang Bai

    NEED 1. 有人希望妈妈是这样的: 但实际上对妈妈做的菜反应确是这样的: 处在不同的时节,根据不同的个人偏好,到底该做些什么饭菜?工作繁忙,家里的厨师可能也没时间琢磨.最后做出的只是应付差事的饭菜 ...

  9. Beta阶段冲刺-3

    一. 每日会议 1. 照片 2. 昨日完成工作 3. 今日完成工作 4. 工作中遇到的困难 杨晨露:组内图表部分遇到了问题,他们的问题一出来,我就头疼了......因为要调整计划时间,所以我觉得我的困 ...

  10. dispatch_block_t

    通常我写一个不带参数的块回调函数是这样写的 在 . h 头文件中 定义类型 typedef void (^leftBlockAction)(); 在定义一个回调函数 -(void)leftButton ...