多路处理模型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. Java8之Lambda表达式基础

    Java 8中,将会提供对lambda的支持,函数式编程FP(Functional Programming)将会得到很好地支持,而函数式编程的一个重要特点就是适合并行运算. λ:希腊字母表中排序第十一 ...

  2. 2018/1/28 RocketMq学习笔记

    RocketMq是支持Topic模式的MQ中间件,它的传输格式为topic(主题,一个product对应一个主题,),Tag(标签,其实就是副标题,是为了更好的支持集群模式而出现的,这样客户端可以指定 ...

  3. redux简明学习

    前面的话 这几天被redux折腾的够呛,看了很多视频,也看了很多资料.很多时候,感觉好像顿悟了,但实际上只是理解了其中的一个小概念而已.真正去做项目的时候,还是会卡壳.可能是学CSS和Javascri ...

  4. Xcode的SVN提示"The request timed out."的解决方案

    问题描述 在利用Xcode的SourceControl进行SVN代码检出时,确认输入地址.帐号密码都正确的情况下,总是提示"The request timed out.".该问题的 ...

  5. 【Oracle】虚拟表Dual

    Dual是个虚拟表,用来构成SELECT语句的语法规则,Oracle保证Dual里面永远只有一条记录.可以用它来做很多事情,例如,查看当前用户:用来调用系统函数:得到序列的下一个值或者当前值:可以用作 ...

  6. Sourcetree的安装与使用

    1 安装遇到的问题 https://segmentfault.com/q/1010000007643870 解决该问题的方法: http://www.jianshu.com/p/3478e2a214a ...

  7. 利用ajax获取网页表单数据,并存储到数据库之二(使用SSH)

    上篇介绍了如何使用JDBC链接ORACLE数据库实现对数据库的增删改查,本例是使用框架SSH来对数据库的数据进行操作. 首先说框架,现在流行的框架很多,如Struts.Hibernate.Spring ...

  8. 学习python3函数笔记

    Python内置了很多有用的函数,我们可以直接调用. 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数abs,只有一个参数.可以直接从Python的官方网站查看文档: http://doc ...

  9. ACdream 1031 Cut

    题意:给定一棵树,删除一些边,让整棵树被分成多个节点数为偶数的联通块,且联通块尽量多. 思路:如果出现连通且节点数为偶数的立即删除这个点与它父节点之间的边,尽量删除即可,因为题目说了保证n为偶数,删了 ...

  10. react-native入坑随笔(持续更新中)

    一.问题: 解决方案:删除./node_modules/react-native/local-cli/core/__fixtures__/files/package.json,删除前记得备份. 二.在 ...