ACE

“重量级的C++ I/O框架,用面向对象实现了一些I/O策略和其它有用的东西,特别是它的Reactor是用OO方式处理非阻塞I/O,而Proactor是用OO方式处理异步I/O的( In particular, his Reactor is an OO way of doing nonblocking I/O, and Proactor is an OO way of doing asynchronous I/O). ”

从很多实际使用来看,ACE是一个很值得学习的网络框架,但由于它过于重量级,导致使用起来并不方便。

ACE中提出了两种网络模式:Proactor和Reactor。

ASIO

“C++的I/O框架,逐渐成为Boost库的一部分。it’s like ACE updated for the STL era。”

支持select、epoll、IOCP等IO模型;

libevent

由Niels Provos用C编写的一个轻量级的I/O框架。它支持kqueue和select、poll和epoll。

1.4.11版还不支持windows的IOCP,但已经有很多开发者自己修改源码,把IOCP合并进去。

C10K问题与解决之道

一台服务器如何同时处理一万个以上的客户端,这就是著名的C10K问题;这个问题曾经困扰过很多服务器的架构师,但这种困扰随着时间的推移早已成为了过去。

网络的众多模型中,有些适合简单处理,有些适合复杂应用,而C10K问题考验的则是网络框架的并发和大连接处理能力,异步I/O虽然也是为并发和大连接设计,但目前aio并不支持socket,所以目前最适合的解决方案是I/O复用。

I/O复用最初在解决C10K问题时也并不出色,随着连接数的增加,处理单个socket请求所花费的事件也迅速增加,但kqueue和epoll的出世后,I/O复用成为了C10K问题的首选方案,下图是libevent给出的测试数据:

从图中可以看出,select、poll随着需要处理的连接数(横轴)增多,处理单个连接的时间明显变长,而epoll和kqueue的表现则非常优秀。

网络编程模型综述 之 成熟的IO框架介绍相关推荐

  1. aio 系统原理 Java_Java新一代网络编程模型AIO原理及Linux系统AIO介绍

    从JDK 7版本开始,Java新加入的文件和网络io特性称为nio2(new io 2, 因为jdk1.4中已经有过一个nio了),包含了众多性能和功能上的改进,其中最重要的部分,就是对异步io的支持 ...

  2. 网络编程模型综述 之 多线程模型

    每个连接对应一个线程 一个网络socket对应一个处理线程,socket采用阻塞I/O模型: 这种模型是小程序和java常用的策略,对于交互式的长连接应用也是常见的选择(比如BBS),也常用来做内部服 ...

  3. 网络编程模型综述 之 UNIX网络I/O模型

    阻塞I/O Socket设置为阻塞模式,当socket不能立即完成I/O操作时,进程或线程进入等待状态,直到操作完成.如下图: 这种模型非常经典,也被广泛使用,优势在于非常简单,等待的过程中占用的系统 ...

  4. 【Java】BIO、NIO、AIO网络编程模型概述

    前言 我们知道,UNIX环境下常见的网络I/O模型有5种: 同步阻塞 同步非阻塞 I/O复用 信号驱动 异步非阻塞 那么基于上述五种模型,Java中,随着NIO和AIO(NIO 2.0)的引入,一般具 ...

  5. 手把手教你玩转网络编程模型之完成例程(Completion Routine)篇(上)-转

    手把手教你玩转网络编程模型之完成例程(Completion Routine)篇 前  言 记得写这个系列的上一篇文章的时候已经是四年前了,准确的说是四年半以前了,翻开我尘封已久的IO模型里面的&quo ...

  6. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll、Epoll模型处理长连接性能比较

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--模型比较>一文中,我们分析了各种模型在处理短连接时的能力.本文我们将讨论处理长连接时各个模型的性能.(转载请指明出于b ...

  7. 朴素、Select、Poll和Epoll网络编程模型实现和分析——模型比较

    经过之前四篇博文的介绍,可以大致清楚各种模型的编程步骤.现在我们来回顾下各种模型(转载请指明出于breaksoftware的csdn博客) 模型编程步骤对比 <朴素.Select.Poll和Ep ...

  8. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Epoll模型

    在阅读完<朴素.Select.Poll和Epoll网络编程模型实现和分析--Select模型>和<朴素.Select.Poll和Epoll网络编程模型实现和分析--Poll模型> ...

  9. 朴素、Select、Poll和Epoll网络编程模型实现和分析——Poll模型

    在<朴素.Select.Poll和Epoll网络编程模型实现和分析--Select模型>中,我们分析了它只能支持1024个连接同时处理的原因.但是在有些需要同时处理更多连接的情况下,102 ...

最新文章

  1. R语言使用magick包的image_border函数和image_background函数自定义图像的边界和背景(Change image border and background)
  2. 学计算机哪家强?清华竟是2018全球第1!(附排名)
  3. ABAP代码检查的注意事项有哪些
  4. CSS里的inline-size和逻辑属性
  5. ServiceMesh最火项目:Istio架构解析
  6. 让敏捷交付优秀的软件
  7. linux 基础命令 1
  8. Oracle 11g 字符集修改
  9. 在.net中使用GAC
  10. S40后台运行权限破解详尽图文
  11. Core、处理器(CPU)核、处理器(CPU)、处理器(CPU)架构、微结构、指令集、指令集架构、ARMv7 内核架构
  12. 客户贷款逾期预测[5] - 特征工程
  13. Ext.ux.form.SearchField 添加placeholder属性 2016年9月19日
  14. 火狐浏览器,错误代码:SEC_ERROR_REUSED_ISSUER_AND_SERIAL
  15. Hadoop服务启动出现Permission denied (publickey,password)
  16. Dynamic ARP Inspection(动态ARP检测)功能,简称DAI
  17. C++多线程异步通信
  18. BitmapFactory.decodeResource
  19. flowableの历史查询
  20. com.nablac0d3.SSLKillSwitch2_0.11.deb

热门文章

  1. C#反序列化 “在分析完成之前就遇到流结尾”
  2. IO流常用的体系结构
  3. 19 | 散列表(中):如何打造一个工业级水平的散列表?
  4. delphi android动态权限,DELPHI安卓动态权限申请
  5. php io select,Python IO多路复用之——select方案服务端和客户端代码【python源码详解】...
  6. index.html乱码问题,用apache打开文件index显示乱码为什么
  7. oracle查询表字段和备注,Oracle 查询表信息(字段+备注)
  8. android 数组增加,java-添加视图数组会使android应用崩溃
  9. 国际经管学院举办计量经济学术前沿研讨会
  10. centos踩坑指南之安装composer