地址在:
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