aio,epoll,libevent,boost::asio解决的问题
来源:互联网 发布:js冒泡排序 从小到大 编辑:程序博客网 时间:2024/04/30 18:18
转自:http://www.2cto.com/kf/201201/116382.html
这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:
aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。epoll作为select的linux的替代品,解决了selectfd_set的限制。性能优于select。而在max平台上替代方案是kqueue。
libevent是一个跨平台异步解决方案,他根据不同的平台提供了不同的异步方案,采用Reactor模型实现。
Boost::asio是一个跨平台的网络及底层IO的C++编程库,实现了对TCP、UDP、ICMP、串口的支持。对于读写方式,ASIO支持同步和异步两种方式。采用了epoll来实现,插入了大量的信号处理。Asio库不需要单独便于,但是测试过程中对boost::system的依赖可能会需要编译部分boost中的库。
muduo采用Reactor模型实现的网络库,只支持Linux 2.6.x下的并发非阻塞TCP网络编程,不跨平台,不支持udp和ipv6。吞吐量方面muduo比libevent2快18%,在事件处理效率方面,muduo与libevent2总体比较接近,muduo吞吐量比boost.asio高15%以上。性能方面作为解决大数据吞吐量很有优势,但是对平台和网络协议支持方面是一个问题。
ACE也是很经典的网络库,出自《C++网络编程》作者之手,设计精妙程度堪称一流,支持协议范围也很广,但是使用复杂度和学习复杂度较高,一直有“学我者生,用我者死”的评价。
需要注意的是他们的定位不同,aio和epoll主要是对异步提供解决方案不是网络库不提供网络支持,而libevent也是主要解决IO的问题只提供简单的http支持,asio和muduo还有ACE一样是高性能网络库。
摘自 缘起
0 0
- aio,epoll,libevent,boost::asio解决的问题
- aio,epoll,libevent,boost::asio解决的问题
- aio,epoll,libevent,boost::asio解决的问题
- aio,epoll,asio
- boost的asio中的read_util问题
- boost的asio使用中的一个问题
- boost::asio io线程退出的问题
- 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ
- Boost.Asio,libevent和ACE之间关于Socket编程的比较(★firecat推荐★)
- 开源网络库ACE、Boost的ASIO、libevent、libev、ZeroMQ
- 关于boost::asio::read_until()之后再boost::asio::read()可能出现的问题
- 解决boost::asio的WinSock.h has already been included
- 解决boost::asio的WinSock.h has already been included
- 解决boost::asio的WinSock.h has already been included
- 解决boost::asio的WinSock.h has already been included
- 解决boost::asio的WinSock.h has already been included
- 解决boost::asio的WinSock.h has already been included
- 解决boost::asio的WinSock.h has already been included
- UP-CUP6410开发板烧写遇到的问题和解决方法
- java http 请求get 和post
- 世界杯的资深球迷
- Service的onStartCommand方法的疑问
- 数组平衡点问题
- aio,epoll,libevent,boost::asio解决的问题
- 走进博客的世界
- quartz2.2.1 example 09代码分析
- Web 3.0时代:网络对你无所不知
- 两种排序
- 图解正向代理、反向代理、透明代理
- UVa101-我的第一道uva
- cocos2d-x 之 CCPhysicsSprite 基于物理引擎的Sprite
- 经纬财富:深圳天通银亏盈计算方法