注册 登录
自由的生活_软路由 返回首页

心想事成的个人空间 https://bbs.routerclub.com/?681 [收藏] [复制] [分享] [RSS]

日志

libevaio :基于libevnt的异步文件事件驱动库

已有 1085 次阅读2012-7-14 13:07

地址在:
http://bitbucket.coredump.fr/libevaio/downloads
看了下它的代码,是把aio的信号通知注册为libevent的信号消息事件。所以是不支持同时打开N个文件同时进行异步读写的。
还有一个aio补丁:
http://sourceforge.net/tracker/index.php?func=detail&aid=2014953&group_id=50884&atid=461324
仍然是使用信号通知,据说对性能仍然有影响。不知道支不支持对N个文件的同时处理。
libaio可以用另外一种函数架回调的办法执行的,但也许这样集成在libevent中不行。

还有另外一种办法就是使用libeio库。
提供全套异步文件操作的接口,让使用者能写出完全非阻塞的程序。阻塞意味着低效,但非阻塞一定要有很好的通知机制才能做到高效。

        其实 linux 下的 AIO(异步 IO)并不是没有解决方案:在用户态,多线程同步来模拟的异步 IO,如 Glibc 的 AIO;以及在内核态实现异步通知,如 linux 内核2.6.22之后实现的 Kernel Native AIO。但两者都存在让使用者望而祛步的问题。

        Glibc 的 AIO bug 太多,而且 IO 发起者并不是最后的 IO 终结者(callback 是在单独的线程执行的);而 kernel Native AIO 只支持O_DIRECT 方式,无法利用 Page cache。

        正是由于上述原因,Marc Alexander Lehmann 大佬决定自己开发一个 AIO 库,及 libeio。libeio 也是在用户态用多线程同步来模拟异步 IO,但实现更高效,代码也更可靠,目前虽然是 beta 版,但已经可以上生产了(node.js 底层就是用 libev 和 libeio 来驱动的)。还要强调一点:libeio 里 IO 的终结者正是当初 IO 的发起者(这一点非常重要,因为 IO 都是由用户的 request 而发起,而 IO 完成后返回给用户的 response 也能在处理 request 的线程中完成)。
http://www.open-open.com/news/view/1bf444f
http://software.schmorp.de/pkg/libeio.html


路过

雷人

握手

鲜花

鸡蛋

评论 (0 个评论)

facelist doodle 涂鸦板

您需要登录后才可以评论 登录 | 注册

QQ|Archiver|手机版|小黑屋|软路由 ( 渝ICP备15001194号-1|渝公网安备 50011602500124号 )

GMT+8, 2024-6-4 10:21 , Processed in 0.038524 second(s), 5 queries , Gzip On, Redis On.

Powered by Discuz! X3.5 Licensed

© 2001-2023 Discuz! Team.

返回顶部