多路处理模型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网络模型的更多相关文章

  1. 图文解说:Nginx+tomcat配置集群负载均衡

    图文解说:Nginx+tomcat配置集群负载均衡 博客分类: appserver nginxTomcatUbuntuLinux网络应用  作者:niumd Blog:http://ari.iteye ...

  2. Nginx+tomcat配置集群负载均衡

    开发的应用采用F5负载均衡交换机,F5将请求转发给5台hp unix服务器,每台服务器有多个webserver实例,对外提供web服务和socket等接口服务.之初,曾有个小小的疑问为何不采用开源的a ...

  3. Netty与网络编程

    Netty什么? Netty项目是一个提供异步事件驱动网络应用框架和快速开发可维护的高性能高扩展性服务端和客户端协议工具集的成果.换句话说,Netty是一个NIO客户端服务端框架,它使得快速而简单的开 ...

  4. 8.Nginx基本概述

    io网络模型介绍 1.介绍Nginx Nginx是一个高性能的HTTP和反向代理web服务器 2.常见的Web服务器 httpd Nginx Tengine OpenResty 3.介绍Nginx应用 ...

  5. nginx基本概述

    上级回顾: 1.NFS 2.Sersync 3.SSH 1.ssh使用两种登录服务器的方式,哪两种? 密码 用户名 + 密码 秘钥 用户名 + 秘钥(私钥) 公钥加密 私钥解密 2.大家常说的 塞ke ...

  6. 浅析Reactor设计模式

    简介:Reactor 设计模式是一种事件驱动的设计模式,将一个或者多个客户端请求分发到不同的处理器上,来提升事件处理的效率.主要的应用场景就是java NIO当中用户处理网络请求.使用的是异步非阻塞I ...

  7. VS2015编译GEOS

    下载链接:http://trac.osgeo.org/geos/ 1. 打开cmake,加载geos源码和定位geos的工程存放位置: 2.点击configure,会报错,首先设置CMAKE_INST ...

  8. windows网络模型之重叠IO的使用

    大部分内容转载自https://blog.csdn.net/piggyxp/article/details/114883 目录: 1. 重叠模型的优点 2. 重叠模型的基本原理 3. 关于重叠模型的基 ...

  9. windows网络模型之重叠IO(完成例程)的使用

    #include <WINSOCK2.H> #include <stdio.h> #define PORT 5150 #define MSGSIZE 1024 #pragma ...

随机推荐

  1. SpringMVC源码情操陶冶-InterceptorsBeanDefinitionParser拦截器解析器

    解析mvc:interceptors节点 观察下InterceptorsBeanDefinitionParser的源码备注 /** * {@link org.springframework.beans ...

  2. JVM学习(二)

    Java中的内存的划分可以用下图来表示: 程序计数器:每一个线程都有一个程序计数器,记录需要执行的下一条指令. HootSpot虚拟机中,不区分虚拟机栈和本地方法栈,统一称为栈.虚拟机栈和本地方法栈也 ...

  3. SDN第四次作业

    作业链接 1.阅读 了解SDN控制器的发展 http://www.sdnlab.com/13306.html http://www.docin.com/p-1536626509.html 了解ryu控 ...

  4. qt事件机制---事件范例

    在笔记qt课程04笔记中

  5. AI 学习新的开始

    推荐入门学习 http://www.cnblogs.com/subconscious/p/6240151.html

  6. 百度编辑器Ueditor增加字体的修改方法

    http://www.jb51.net/article/109896.htm Ueditor本身自带11种字体  使用过程中这11种字体往往不能满足我们的需求,现在我要添加"仿宋" ...

  7. 整理的linux面试运维题

    如何在非交互模式下把 /home/example/下所有.conf文件中的 192.168.0.2 改成 db01 ?   find /home/example/ -type f -name &quo ...

  8. mysql中的范式与范式——读<<高性能mysql>>笔记一

    对于任何给定的数据库通常都有很多表示方法,从完全的范式化到完全的反范式化,以及两者的折中.在范式化的数据库中,每个事实数据会出现并且只出现一次.相反,在反范式化的数据库中,可能会存储在多个地方. 那什 ...

  9. 教我徒弟Android开发入门(二)

    前言: 上一期实现了简单的QQ登录效果,这一期继续对上一期进行扩展 本期的知识点: Toast弹窗,三种方法实现按钮的点击事件监听 正文:   Toast弹窗其实很简单,在Android Studio ...

  10. Java经典编程题50道之三十二

    取一个整数a从右端开始的4-7位. public class Example32 {    public static void main(String[] args) {        cut(12 ...