程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> aio,epoll,libevent,boost::asio解決的問題

aio,epoll,libevent,boost::asio解決的問題

編輯:C++入門知識

這幾天一直在做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一樣是高性能網絡庫。

摘自 緣起

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved