http协议和i/o模型
http协议----基于请求报文和响应报文完成一次http事务
应用层协议格式有两种: 文本(开发容易,但交互解析困难如http smtp),二进制(交互解析容易,但理解起来困难memocache)
状态码:304 已经请求过,但是资源没什么改变返回304;对于get请求,只返回head,以表示资源有没有
缓存:在速度不匹配之间的网络组件之间添加缓存以达到性能最优。请求首部中的if-Modified-Since,If-None-Match是关键信息
user-agent加载的仅仅是web框架,资源家在的过程就是向服务器请求的过程,如果一个页面有很多url,逐一请求主机的话,浪费时间,就需要通过缓存提高加载速度,如果是多核资源,可能并发2个请求
所以,对于服务器,可能同时接受到2个或多个请求,但这可能来自同一个请求客户端!!!
现如今,服务器面对的成千上万的并发也就毫不奇怪了,常见的优化方式:例如看到第一屏,(只加载第一屏,除非添加滚轮),或者压垮所有服务。
pv:整个页面有很多请求(链接),通过日志数据挖掘做广告投放和用户行为分析,虽然有站长统计工具,但大型网站最好自行统计pv;计算标准是访问一个网站入口后能完整的呈现页面就算是一个pv
uv:独立IP,日uv,一天内有多少独立ip地址发起过页面访问
为了客户端打开页面时尽可能的快:通常的做法有:加载缓存和并发访问,不过现如今浏览器都是多线程的,任意浏览器对于单个域名线程数是有上限的,例如访问域名A,开启两个线程,访问域名B,开启两个线程
所以对于同一网站可以设置多个二级域名,并把资源,如图片,视频,文本文件分散部署到各二级域名的方法来实现一个站点开启多线程的方式达到访问效率的优化。
httpd mpm多路处理模块有三种模式:prefork 主进程以管理员身份启动生成多个子进程,可以监听80端口,凡小于1024端口号的谓之特权端口
- I/O类型:所谓I/O,一方请求服务,另一方调用服务,那么,请求方如何得知什么时候得知自己的请求被响应了呢(如何通知调用者)
同步synchronous:调用发出后,不会立即返回,一旦返回,则返回最终结果
异步asychronous调用发出后,被调用方立即反馈消息,但并非最终结果,被调用者通过回调函数,状态信息,通知机制等通知调用方处理结果(银行服务,拿到排队号,被叫号的过程)
上述关注的是消息通知的机制
------------------------------------------------------
以下关注的是请求发出者等待被调用者返回结果时的状态
阻塞block:调用者没结果一直出等待状态,被挂起
非阻塞non-block:调用者不会被阻塞
- 阻塞式I/O blocking I/O:一个进程通常只能处理单步I/O
- 非阻塞式I/O:盲等待,polling模型正基于此,过一段时间就去咨询是否完成,效率不一定优于阻塞,所谓非阻塞,是指从磁盘加载数据到内核空间这一段;从内核内存复制到应用进程阶段仍是阻塞的
- I/O多路复用,一个进程只能处理单步I/O,以向服务器请求资源为例,一步负责监听请求(网络I/O),一步负责请求数据,由于从内核空间复制数据到应用进程内存时处于阻塞状态,这时进程处于“不可终止睡眠状态”,即使网络I/O发生异动也不可能作出响应,按理说,在请求时间过长时,我们也无法取消请求,可现实生活中的例子告诉我们,我们确实可以取消请求,这就是多路复用I/O(无非是在网络请求和磁盘请求之间添加了一个“代理”,代i理会转发请求给空闲的进程,支持两路以上的复用----这就是select() 由BSE研发 poll()和select()功能一致,但是局限在于1024条请求,尽管可以改代码,但实际上1024是并发的极限,超出后拒绝服务,select是复用代理)---其实还得阻塞,只不过可以分身干点别的
- 事件驱动式I/O:被调用者会回复调用者-----你的请求我拿到了,10分钟后ok,你可以先干点别的,这就免去了盲等(这一阶段一个进程可以处理n个请求);然而第二步从内核内存到进程内存的过程依然阻塞;一旦收到就绪的通知,会调用回调函数完成后续的操作(callback),对于进程阻塞在处理请求而无法接收完成通知的情况下,有两种机制完成通知,水平触发(通知多次)和边缘触发(通知一次,而后调用回调函数,犹如端面)
- 异步I/O:从磁盘load数据到内核内存,再从内核内存复制到应用进程内存后通知调用方就绪,进程打包响应报文。对并发支持好,编程复杂度高
httpd是典型的事件驱动模型服务器,版本2.4以后还支持异步I/O模型,通常数据加载完成后,会缓存在内存里,所以多个请求请求同一数据的时候,其优势是显而易见的
一个典型的应用进程发起I/O请求的步骤
向内核空间请求数据-------->内核没有------>向磁盘请求数据------>把磁盘数据复制到内核内存----->再把数据拷贝到应用进程内存(每个应用进程都有各自独立的空间);真正的I/O过程就是从内核复制数据到应用进程内存的那一步
综上所述,prefork,worker基于多路复用I/O,event基于事件驱动模型,nginx服务器基于事件驱动模型,基于边缘触发,支持异步I/O,内存映射机制进行数据发放,一个进程可处理5000到1万个请求,随你而定,当然不是越高越好
http协议和i/o模型的更多相关文章
- python 全栈开发,Day33(tcp协议和udp协议,互联网协议与osi模型,socket概念,套接字(socket)初使用)
先来回顾一下昨天的内容 网络编程开发架构 B/S C/S架构网卡 mac地址网段 ip地址 : 表示了一台电脑在网络中的位置 子网掩码 : ip和子网掩码按位与得到网段 网关ip : 内置在路由器中的 ...
- (1)基于tcp协议的编程模型 (2)tcp协议和udp协议的比较 (3)基于udp协议的编程模型 (4)反射机制
1.基于tcp协议的编程模型(重中之重)1.1 编程模型服务器: (1)创建ServerSocket类型的对象,并提供端口号: (2)等待客户端的连接请求,调用accept()方法: (3)使用输入输 ...
- (1)网络编程的常识 (2)基于tcp协议的编程模型 (3)tcp协议和udp协议的比较 (4)基于udp协议的编程模型
1.网络编程的常识 目前主流的网络通讯软件有:微信.QQ.YY.陌陌.探探.飞信.阿里旺旺.... 在吗? 1.1 七层网络模型(熟悉) 为了保证数据传递的可靠安全等等,ISO(国际标准委员会组织)将 ...
- HTTP协议和SOCKS5协议
HTTP协议和SOCKS5协议 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 我们平时上网的时候基本上是离不开浏览器的,尤其是搜索资料的时候,那么这个浏览器是如何工作的呢?用的又是 ...
- 页面解耦—— 统跳协议和Rewrite引擎
原文: http://pingguohe.net/2015/11/24/Navigator-and-Rewrite.html 解耦神器 —— 统跳协议和Rewrite引擎 Nov 24, 2015 • ...
- http协议和web应用有状态和无状态浅析
http协议和web应用有状态和无状态浅析 (2013-10-14 10:38:06) 转载▼ 标签: it 我们通常说的web应用程序的无状态性的含义是什么呢? 直观的说,“每次的请求都是独立的 ...
- 在线聊天室的实现(1)--websocket协议和javascript版的api
前言: 大家刚学socket编程的时候, 往往以聊天室作为学习DEMO, 实现简单且上手容易. 该Demo被不同语言实现和演绎, 网上相关资料亦不胜枚举. 以至于很多技术书籍在讲解网络相关的编程时, ...
- http协议和web本质
转载:http://www.cnblogs.com/dinglang/archive/2012/02/11/2346430.html http协议和web本质 当你在浏览器地址栏敲入“http://w ...
- oracle网络服务之beq协议和SDU优化(性能提升可达30%)
oracle网络服务之beq协议和SDU优化(性能提升可达30%) 12.3.1 BEQ协议 如果Oracle数据库服务端和客户端在同一台机器上,可以使用BEQ连接,BEQ连接采用进程间直接通信,不 ...
随机推荐
- 服务间的通信 RestTemplate和Feign
1.RestTemplate Spring RestTemplate 是 Spring 提供的用于访问 Rest 服务的客户端,RestTemplate 提供了多种便捷访问远程Http服务的方法,能够 ...
- 【JulyEdu-Python基础】第 6 课:高级面向对象
使用@property添加属性和自定义属性 __slots__和property 方法和属性的动态绑定 使用__slots__限定class实例能添加的属性 __slots__仅对当前类实例起作用,对 ...
- 【OpenGL】初识OpenGL4.0
目录(?)[-] 什么是GLSL GLEW 安装GLEW 使用GLEW 其他库 使用GLM库进行数学运算 安装GLM 使用GLM 使用GLM作为OpenGL的输入 使用GLFW进行窗口管理 这篇文章主 ...
- ip速度检测与云主机|VPS的抉择:bandwagonhost digitalocean hostWind Vultr Linode
最近的梯子断了,网站又被注销了.又到了挑vps的时间了.其实, 这些东西,烦死人了.挺浪费生命的. 首先速度测试, MTR测试 网站速度测试 17CE. http://tool.chinaz.com/ ...
- Vue 项目结构介绍
Vue 项目创建完成后,使用 Web Storm 打开项目,项目目录如下: build 文件夹,用来存放项目构建脚本 config 中存放项目的一些基本配置信息,最常用的就是端口转发 node_mod ...
- [Python3] 037 函数式编程 装饰器
目录 函数式编程 之 装饰器 Decrator 1. 引子 2. 简介 3. 使用 函数式编程 之 装饰器 Decrator 1. 引子 >>> def func(): ... pr ...
- 【0.3】mysql复制的日常管理维护,mysql复制常见问题处理
[1]复制的日常管理 #复制的日常管理与维护 [1.1]show slave status\G :在从库查看从库线程状态 [1.2]flush tables with read lock; :主从不 ...
- mysql jdbc url
地址为jdbc:mysql://localhost:3306/mymiaosha?characterEncoding=utf-8时访问时可能会出现下图提示 地址改为jdbc:mysql://local ...
- AcWing池塘计数
这个题让我们求连通块得数数量,我考虑用flood fill算法. 也就是枚举这个地图每一个点,假如符合要求就bfs与这个点联通的点,并打上标记.结束后接着枚举没有被标记并且符号要求的点... 1.== ...
- 安装Composer与PsySH
Windows安装Composer 需要开启 openssl 配置:打开 php 目录下的 php.ini,将 extension=php_openssl.dll 前面的分号去掉就可以了. https ...