配置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. Egret(白鹭引擎)——Egret+fairyGui 实战项目入门

    前言 一行白鹭上青天 需求 最近,我们老板刷刷的为了省事,给美术减压(背景有点长,不说了). 美术出 fairygui,我需要在网页上看到实时操作,并且看到效果! 需求分析 这怕是要了我的狗命啊,但是 ...

  2. 基于Vue手写一个下拉刷新

    当然不乏有很多下拉刷新的插件可以直接使用,但是自定义程度不强,大部分都只能改改文字,很难满足设计师的创意,譬如淘宝和京东首页那种效果,就需要自己花心思倒腾了,最近刚好有这种需求,做完了稍微总结一下,具 ...

  3. Mvc4_语法基础介绍

    @model MvcApplicationTest.Models.User @{ ViewBag.Title = "Index"; } <script type=" ...

  4. 4星|《流量池》:Luckin Coffee营销操盘手经验谈

    流量池:“急功近利”的流量布局.营销转化 作者是一线营销操盘手,全书是作者的经验总结,这样的作者在营销类图书中比较罕见,因此这本书非常有价值. 全书是写给巨头之外的企业营销人员看的,这样的企业的流量来 ...

  5. PBFT_拜占庭容错算法

    根据论文<Practical Byzantine Fault Tolerance and Proactive Recovery>整理 Practical byzantine fault t ...

  6. PAT甲题题解-1120. Friend Numbers (20)-水题

    博主欢迎转载,但请给出本文链接,我尊重你,你尊重我,谢谢~http://www.cnblogs.com/chenxiwenruo/p/6789775.html特别不喜欢那些随便转载别人的原创文章又不给 ...

  7. PAT甲题题解-1127. ZigZagging on a Tree (30)-中序、后序建树

    根据中序遍历和前序遍历确定一棵二叉树,然后按“层次遍历”序列输出.输出规则:除根节点外,接下来每层的节点输出顺序是:先从左到右,再从右到左,交替输出 #include <iostream> ...

  8. Linux内核的启动过程分析

    秦鼎涛 <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 一.实验目的及要求: 使用gdb跟踪调试内核从s ...

  9. java实验报告一

    一.实验内容 1. 使用JDK编译.运行简单的Java程序 2.使用Eclipse 编辑.编译.运行.调试Java程序 二.实验步骤 (一)命令行下Java程序开发 1. 首先双击桌面上的Xface终 ...

  10. Day Six

    站立式会议 站立式会议内容总结 442 今天:实现计划界面的逻辑 遇到的问题:模态框问题 明天:解决上面问题,开始使用动态数据 331 今天:点击添加找到文件 遇到问题:找到文件在app的引入实现 明 ...