这几天一直在做linux大批量数据的解决方案,不断的深入了解了一下aio,epoll,libevent,boost::asio。以前只知道他们都是做异步/非阻塞的,但是具体解决的问题的关键点是什么,通过这几天的深入了解,把他们总结一下:
aio是linux2.6以后内核实现的异步IO,或者说他才是真正意义上的异步IO。
<style type="text/css">
<!--
@page
{margin:0.79in}
p
{margin-bottom:0.08in}
-->
</style>
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一样是高性能网络库。
分享到:
相关推荐
aio-cli-plugin-app 创建,构建和部署Adobe I / O应用用法$ aio plugins:install -g @adobe/aio-cli-plugin-app$ # OR$ aio discover -i$ aio app --help指令 aio app:add:service aio app:add:web-assets aio app:...
aio-cli-plugin-runtime 适用于Adobe I / O CLI的Adobe I / O Runtime插件用法$ aio plugins:install @adobe/aio-cli-plugin-runtime$ # OR$ aio discover -i$ aio runtime --help指令 aio runtime:action:get ...
MAS AIO 2.2支持jihuo: Windows 7 / 8 / 8.1 / 10 / 11 Windows Server 2008 R2 / 2012 / 2012 R2 / 2016 / 2019 / 2022 Office 批量版本 2010 / 2013 / 2016 / 2019 / 2021
包括C&C++, C#, JAVA, GOLANG, ERLANG等居于IOCP, SELECT, POLL, EPOLL, KQUEUE, BIO, NIO, AIO, 并发语言等实现的同步或异步, 阻塞或非阻塞通信模型, 如:libevent, libev, libuv, netty, mina, ACE, boost等...
use IO::AIO::Promiser ':all';my $cv = AnyEvent->condvar();aio_slurp("/etc/services", 0, 0)->then( sub { $cv->(@_) }, sub { $cv->croak(@_) },);print $cv->recv();它有点像 ,但是使用async / await而不是 ...
aio-豆茎aio-beanstalk 是 beanstalk 的异步客户端状态:低级协议已完全实现但未经过充分测试。 高层接口处于原型阶段。低级接口基本上它看起来像: import asynciofrom aiobeanstalk . proto import Client@ ...
aio-cli-plugin-console 适用于Adobe I / O CLI的控制台集成插件 用法 $ aio plugins:install -g @adobe/aio-cli-plugin-console $ # OR $ aio discover -i $ aio console --help 指令 aio console:project:list ...
联想超融合AIO LVD云桌面整体解决方案,联想超融合AIO解决方案 联想超融合LVD解决方案 联想云桌面部署解决方案 联想超融合整体解决方案 联想云解决方案云南总代理
AIO-BEO 如何使用Mocha通过Monitor API或Newman Javascript库执行Postman Collections。资源检索ID 收藏 监视器环境变量API密钥-PM_API_KEY 集合ID-PM_COLLECTION_ID 监视器ID-PM_MONITOR_ID本地执行npm install...
[脱壳工具] Unpacker AIO Tool 使用说明: 直接拖放到窗口,选择相应的保护模式 点击unpack 即可
但是epoll不存在这个问题,它只会对"活跃"的socket进行 操作---这是因为在内核实现中epoll是根据每个fd上面的callback函数实现的。那么,只有"活跃"的socket才会主动的去调用 callback函数,其他idle状态socket则...
AIO Search是一个方便的Chrome扩展程序,可为您提供增强的工具栏,用于按类别在网络上搜索,并通过www.aiosearch.com网站在一页的标签中显示结果。您可以搜索按类别分组的多个搜索引擎。所有类别和引擎都可以通过...
这是一个将很多小工具功能集成一体的一个"工具". 功能: ...用法:Aio.exe -AutoRun 2.Clone -> 克隆帐户 ...build 04/01/2006这版本因为编译时参数问题,syn扫描什么都扫不到,但build 06/10/2006版本已修正.
编写连接数巨大的高负载服务器程序时,经典的多线程模式和 select模式都不再适 用。应当抛弃它们,采用 epoll/kqueue/dev_poll 来捕获 I/O 事件。最后简要介绍了 AIO。 --------- from 搜狗实验室
AIO-Boot:AIO Boot是用于USB和HDD的多合一可启动软件。 是Windows上最好的Multiboot USB Creator之一
aio-switch-updater:多合一Nintendo Switch更新器
包括C&C++, C#, JAVA, GOLANG, ERLANG等居于IOCP, SELECT, POLL, EPOLL, KQUEUE, BIO, NIO, AIO, 并发语言等实现的同步或异步, 阻塞或非阻塞通信模型, 如:libevent, libev, libuv, netty, mina, ACE, boost等...
在这里最重要的莫过于select模型和Asynchronous I/O模型。从理论上说,AIO似乎是最高效的,你的IO操作可以立即返回,然后等待os告诉你IO操作完成。... 最终,Davide Libenzi开发的epoll进入2.6内核成为正式的解决方案。
使用可交换的网络传输模块,包括 C++ iostreams 和 Boost Asio。 主要特性: 完全支持RFC6455 部分支持Hixie 76/Hybi 00,07-17规格草案(仅服务器) 基于消息/事件的界面 支持安全的WebSocket(TLS),IPv6和显式...
艾奥皮卡 围绕的包装,用于asyncio和人类...4 透明的支持支持 安装pip install aio-pika 用法示例简单的消费者: import asyncioimport aio_pikaasync def main ( loop ): connection = await aio_pika . connect_robus