IO网络模型
多路处理模型MPM
MPM是Apache2引入的一个概念,就是将结构模块化。把核心任务处理作为一个可插拔的模块,使其能针对不同的环境进行优化
在这个情况下,就诞生出了处理模式的概念
Prefork
实现了一个非线程型的、预派生的Web服务器
Worker
它也使用了多线程,每个进程又有多个线程
Event
是worker的变种,它把服务进程从连接中分离出来,在开启KeepAlive场合下相对worker模式能够承受的了更高的并发负载
IO调用过程
IO发生时涉及的对象和步骤。对于一个network IO,它涉及到两个系统对象,一个是调用IO process(or thread),另一个就是系统内核。
当一个read操作发生时,它会经历两个阶段
1. 等待数据准备(等待数据从网络完整的传输过来)
2. 将数据从内核空间拷贝到用户空间
阻塞I/O模型

当用户进程调用了recvfrom这个系统调用,kernel就开始了IO的第一个阶段:准备数据。 对于network io来说,很多时候数据在一开始还没到达(比如,还没有收到一个完整的UDP包),这个时候kernel就要等待足够的数据到来 而在用户进程这边,整个进程就会被阻塞。当kernel一直等到数据准备好了,它就会将数据从kernel中拷贝到用户内存,然后kernel返回结果,用户进程才解除block的状态,重新运行起来 因此,blocking IO的特点就是在IO执行的两个阶段都被阻塞了
非阻塞I/O模型

当用户进程发出read操作时,如果kernel中的数据还没有准备好,那么它并不会block用户进程,而是立刻返回一个error 从用户进程角度讲,它发起一个read操作后,并不需要等待,而是马上就得到一个结果 用户进程判断结果是一个error时,它就知道数据还没有准备好,于是它可以再次发送read操作 一旦kernel中的数据准备好了,并且又再次收到了用户进程的system call,那么它马上就将数据拷贝到用户空间,然后返回
IO多路复用模型

Select同步阻塞
1. 每次调用select,都需要把fd(文件句柄)集合从用户态拷贝到内核态,这个开销在fd多时会很大
2. 同时每次调用select都需要在内核遍历传递进来的所有fd,这个开销在fd很多时也很大
3. select支持的文件描述符数量太小了,默认是1024
异步I/O模型

Epoll
1. 支持一个进程打开大数目的socket描述符
2. IO效率不随FD数目增加而线性下降
3. 使用mmap加速内核与用户空间的消息传递
4. 边缘触发和水平触发
事件驱动模型

目前大部分的UI编程都是事件驱动模型,如很多UI平台都会提供onClick()事件,这个事件就代表鼠标按下事件
1. 有一个事件(消息)队列
2. 鼠标按下时,往这个队列中增加一个点击事件(消息)
3. 有个循环,不断从队列取出事件,根据不同的事件,调用不同的函数,如onClick()、onKeyDown()等
4. 事件(消息)一般都各自保存各自的处理函数指针,这样,每个消息都有独立的处理函数
更多详细参考 http://www.cnblogs.com/alex3714/articles/5876749.html
IO网络模型的更多相关文章
- 图文解说:Nginx+tomcat配置集群负载均衡
图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用 作者:niumd Blog:http://ari.iteye ...
- Nginx+tomcat配置集群负载均衡
开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的a ...
- Netty与网络编程
Netty什么? Netty项目是一个提供异步事件驱动网络应用框架和快速开发可维护的高性能高扩展性服务端和客户端协议工具集的成果.换句话说,Netty是一个NIO客户端服务端框架,它使得快速而简单的开 ...
- 8.Nginx基本概述
io网络模型介绍 1.介绍Nginx Nginx是一个高性能的HTTP和反向代理web服务器 2.常见的Web服务器 httpd Nginx Tengine OpenResty 3.介绍Nginx应用 ...
- nginx基本概述
上级回顾: 1.NFS 2.Sersync 3.SSH 1.ssh使用两种登录服务器的方式,哪两种? 密码 用户名 + 密码 秘钥 用户名 + 秘钥(私钥) 公钥加密 私钥解密 2.大家常说的 塞ke ...
- 浅析Reactor设计模式
简介:Reactor 设计模式是一种事件驱动的设计模式,将一个或者多个客户端请求分发到不同的处理器上,来提升事件处理的效率.主要的应用场景就是java NIO当中用户处理网络请求.使用的是异步非阻塞I ...
- VS2015编译GEOS
下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...
- windows网络模型之重叠IO的使用
大部分内容转载自https://blog.csdn.net/piggyxp/article/details/114883 目录: 1. 重叠模型的优点 2. 重叠模型的基本原理 3. 关于重叠模型的基 ...
- windows网络模型之重叠IO(完成例程)的使用
#include <WINSOCK2.H> #include <stdio.h> #define PORT 5150 #define MSGSIZE 1024 #pragma ...
随机推荐
- BZOJ 1355: [Baltic2009]Radio Transmission [KMP 循环节]
1355: [Baltic2009]Radio Transmission Time Limit: 10 Sec Memory Limit: 64 MBSubmit: 792 Solved: 535 ...
- Ubuntu下Nginx启动、停止等常用命令
本文详细介绍Ubuntu下Nginx启动.停止等常用命令.在开发过程中,我们会经常的修改Nginx的配置文件,每次修改配置文件都可以先测试下本次修改的配置文件是否正确,可以利用以下命令: servic ...
- mongoDB高级查询$type4array使用解析
今天在使用mongoDB高级查询$type:符号 -- 4代指Array类型发现一个问题. $type符号: $type操作符是基于BSON类型来检索集合中匹配的数据类型,并返回结果. 下面是mong ...
- dedecms在任意页面调用任意栏目文章
dedecms在任意页面调用任意栏目文章,我们用arclist标签即可实现.如果是调用多个栏目文章可以给typeid多个值. 我们以调用ID为1和ID为30的两个栏目下5篇文章为例: {dede:ar ...
- Chrome Stylist 插件 (CSS备份)
Stylist 插件还是很好用的,可以给网站自定义CSS样式,(还有个插件叫"油猴子",可以给网页加载自定义JS): 不过麻烦的是,现在的最新版360浏览器不能显示这个插件(这个浏 ...
- VS2015 (C/C++) 生成的程序,不能在server2008上运行
项目本来是为Linux下运行做的,但是客户环境需要在windows下运行,幸好用的一些库是跨平台的. 于是用vs2015编译. 然后就发现在2008上却运行时库,装了2015的运行时库后, 在运行,就 ...
- Python之数据类型转换
平时我们在处理数据的时候,有些数据类型不是我们想要的,怎么办? 一.数据类型转换:要转换的类型(数据) 要把num01转换为整数:int(num01) 要把num01转换为浮点数:float(num0 ...
- 原码,反码,补码 与(&) 或(|) 非(~) 异或(^) 左移 << 右移 >> 无符号右移 >>>
原码 数字在计算机中以二进制表示,8位的字长,最高位是符号位, 正数为0,负数为1.比如,3为0000 0011: -3为1000 0011. 注意,Java中int为32位.3的16进制表示为3,- ...
- CentOS 设置网络(修改IP&修改网关&修改DNS)
CentOS修改IP地址 # ifconfig eth0 192.168.1.80 这样就把IP地址修改为192.168.1.80(如果发现上不了网了,那么你可能需要把网关和DNS也改一下,后面会提到 ...
- HTML5VEDIO标签阿里云-微信浏览器兼容性问题
在网页展示媒体对象,离不开HTML5的 audio和video对象.但这两个目前来看兼容性方面还得关注一下. 目前在做一个阿里云下载video 并在微信端播放mp4格式的视频的时候,碰到了一些兼容性问 ...