配置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. servelt filter listener 的生命周期

    1. servlet    当第一次请求一个servlet资源时,servlet容器创建这个servlet实例,并调用他的 init(ServletConfig config)做一些初始化的工作,然后 ...

  2. Redis简介、安装、配置、启用学习笔记

    前一篇文章有介绍关系型数据库和非关系型数据库的差异,现在就来学习一下用的较广的非关系型数据库:Redis数据库 Redis 简介 Redis 是完全开源免费的,遵守BSD协议,是一个高性能的key-v ...

  3. 蓝牙学习笔记二(Android连接问题)

    可以通过以下两点加速蓝牙连接: 1.更新连接参数 interval:连接间隔(connection intervals ),范围在 7.5 毫秒 到 4 秒. latency:连接延迟 ... 还有一 ...

  4. [Direct2D开发] 从资源加载位图

    转载请注明出处:http://www.cnblogs.com/Ray1024 一.概述 Direct2D使用Windows图像处理组件 (WIC) 来加载位图.从文件加载位图的方法很简单,而且网上的教 ...

  5. JNI探秘-----你不知道的FileInputStream的秘密

    作者:zuoxiaolong8810(左潇龙),转载请注明出处,特别说明:本博文来自博主原博客,为保证新博客中博文的完整性,特复制到此留存,如需转载请注明新博客地址即可. 设计模式系列结束,迎来了LZ ...

  6. cocos2dx渲染架构

    2dx的时代UI树便利和渲染是没有分开的,遍历UI树的时候就渲染.3dx版本为了分离了ui树的遍历和渲染,先遍历生成渲染命令发到渲染队列,之后遍历渲染命令队列开始渲染.这样做的好处是渲染命令可以重用, ...

  7. Go语言简单学习

    GO 支持goroutine 和通道,并且推荐使用消息而不是共享内存来进行并发编程,总体来说,Go语言是一个非常现代化的语言,精小但非常强大 Go语言的主要特性: 1.自动垃圾回收 2.更丰富的内置类 ...

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

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

  9. yocto-sumo源码解析(二): oe-buildenv-internal

    1 首先,脚本先对运行方式进行了检测: if ! $(return >/dev/null 2>&1) ; then echo 'oe-buildenv-internal: erro ...

  10. PAT甲题题解-1126. Eulerian Path (25)-欧拉回路+并查集判断图的连通性

    题目已经告诉如何判断欧拉回路了,剩下的有一点要注意,可能图本身并不连通. 所以这里用并查集来判断图的联通性. #include <iostream> #include <cstdio ...