网络编程模型综述 之 成熟的IO框架介绍
2013-10-24 15:39
441 查看
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框架介绍
- linux网络编程--IO模型
- JAVA基础知识之网络编程——-网络通信模型(IO模型)
- 网络编程五种IO模型之poll模型
- 跨平台网络通信与server编程框架库(acl库)介绍
- Linux非阻塞IO(二)网络编程中非阻塞IO与IO复用模型结合
- Linux 网络编程(IO模型)
- 网络编程中的5种IO模型
- 网络编程的5个io模型
- 网络编程模型综述 之 多线程模型
- 网络编程---IO复用之epoll模型
- 8个java 网络编程框架介绍
- 网络编程--IO模型示例
- 网络编程五种IO模型之WSAAsyncSelect模型
- 网络编程的5个IO模型
- 【Linux网络编程】IO模型与服务器模型
- Beej网络socket编程指南 1 目录 套接字介绍和网络模型
- 跨平台网络通信与服务器编程框架库(acl库)介绍
- 网络编程IO模型--学习笔记
- 网络编程五种IO模型之WSAEventSelect模型