配置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. 2_C语言中的数据类型 (十)数组

    1          字符串与字符数组 1.1       字符数组定义 char array[100]; 1.2       字符数组初始化 char array[100] = {'a', 'b', ...

  2. PowerBI开发 第八篇:查询参数

    在PowerBI Desktop中,用户可以定义一个或多个查询参数(Query Parameter),参数的功能是为了实现PowerBI的参数化编程,使得Data Source的属性.替换值和过滤数据 ...

  3. Android Studio Xposed模块编写(二)

    阅读本文前,假设读者已经看过Android Studio Xposed模块编写(一)  相关环境已经搭建完成.本文演示案例与上文环境一致,不在赘述. 1.概述 Xposed是非常牛叉的一款hook框架 ...

  4. Scracpy爬取图片实例

    非常简单,直接上爬虫代码 # -*- coding: utf-8 -*- import scrapy import urllib import logging class TopitComSpider ...

  5. Yeoman的好基友:Grunt

    grunt介绍 前端不能承受之痛 1.这是我们的生活 文件压缩:YUI Compressor.Google Closure 文件合并:fiddler + qzmin 文件校验:jshint 雪碧图:c ...

  6. Final阶段基于spec评论作品

    组名:杨老师粉丝群 组长:乔静玉 组员:吴奕瑶  刘佳瑞  公冶令鑫  杨磊  刘欣  张宇  卢帝同 一.测试目标:拉格朗日2018——飞词 1.开始界面,只有一个开始游戏按钮,简约且醒目     ...

  7. 《LINUX内核设计与实现》第一、二章学习总结

    第一章 Linux内核简介 (一)Unix是一个强大.健壮和稳定的操作系统,特点是: Unix很简洁,仅仅提供几个几百个系统调用并且有一个非常明确的设计目的 在Unix中,所有的东西都被当作文件对待, ...

  8. 20172308 实验五《Java面向对象程序设计 》实验报告

    20172308 2017-2018-2 实验五 <网络编程与安全>报告 课程:<程序设计与数据结构> 班级: 1723 姓名: 周亚杰 学号:20172308 实验教师:王志 ...

  9. 第二个spring冲刺第3天

    今天天气突然变得很冷,所以我们队的人都有少许的不适.加上天气比较冷,我们都不怎么想做.幸好在队长的提醒下,我们终于继续投入研发的工作中.由于市面上的同类软件的数量不少所以我们下载了一些来看,希望能找到 ...

  10. 基于RYU restful api实现的VLAN网络虚拟化

    基于RYU restful api实现的VLAN网络虚拟化 前言 本次实验是基于OVS的VLAN虚拟化简易实践方案的进一步的实验,采用RYU restful api进行配置.本质上和上次实验没什么差, ...