Chinaunix首页 | 论坛 | 博客
  • 博客访问: 910738
  • 博文数量: 299
  • 博客积分: 0
  • 博客等级: 民兵
  • 技术积分: 2493
  • 用 户 组: 普通用户
  • 注册时间: 2014-03-21 10:07
个人简介

Linux后台服务器编程。

文章分类

全部博文(299)

文章存档

2015年(2)

2014年(297)

分类: LINUX

2014-11-10 21:11:59

这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:

aiolinux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO


epoll作为selectlinux的替代品,解决了selectfd_set的限制。性能优于select。而在mac os x平台上替代方案是kqueue。

libevent是一个跨平台异步解决方案,他根据不同的平台提供了不同的异步方案,采用Reactor模型实现。

Boost::asio是一个跨平台的网络及底层IOC++编程库,实现了对TCPUDPICMP、串口的支持。对于读写方式,ASIO支持同步和异步两种方式。采用了epoll来实现,插入了大量的信号处理。Asio库不需要单独便于,但是测试过程中对boost::system的依赖可能会需要编译部分boost中的库。

muduo采用Reactor模型实现的网络库,只支持Linux 2.6.x下的并发非阻塞TCP网络编程,不跨平台,不支持udpipv6。吞吐量方面muduolibevent218%,在事件处理效率方面,muduolibevent2总体比较接近,muduo吞吐量比boost.asio15%以上。性能方面作为解决大数据吞吐量很有优势,但是对平台和网络协议支持方面是一个问题。

ACE也是很经典的网络库,出自《C++网络编程》作者之手,设计精妙程度堪称一流,支持协议范围也很广,但是使用复杂度和学习复杂度较高,一直有“学我者生,用我者死”的评价。

需要注意的是他们的定位不同,aioepoll主要是对异步提供解决方案不是网络库不提供网络支持,而libevent也是主要解决IO的问题只提供简单的http支持,asiomuduo还有ACE一样是高性能网络库。

阅读(2761) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~