cdsfiui 发表于 2017-02-06 09:37

libaio是glibc提供的还是kernel提供的?

貌似glibc和内核都提供了aio的机制,我们常用的libaio到底是glibc提供的,还是内核提供的?

MMMIX 发表于 2017-02-06 16:15

回复 1# cdsfiui

libaio (https://git.fedorahosted.org/cgit/libaio.git)是直接对 Linux 相关系统调用的封装;

glibc 里面提供的是 POSIX asynchronous I/O(http://man7.org/linux/man-pages/man7/aio.7.html)的实现。

yulihua49 发表于 2017-02-06 22:27

本帖最后由 yulihua49 于 2017-02-06 22:31 编辑

libaio。。。。107以上的好使。支持eventfd,epoll。。。。

windoze 发表于 2017-02-06 22:50

目前应该都是kernel aio了,除非你还在用2.4

yulihua49 发表于 2017-02-07 21:12

本帖最后由 yulihua49 于 2017-02-07 21:24 编辑

MMMIX 发表于 2017-02-06 16:15
回复 1# cdsfiui

libaio (https://git.fedorahosted.org/cgit/libaio.git)是直接对 Linux 相关系统调 ...
后边那个不支持eventfd和epoll。
必须自己弄回调函数,他派生线程处理,没有办法封装成协程。
看看这个,libaio与eventfd 和epoll联用。
http://blog.chinaunix.net/uid-16979052-id-3840266.html在centos 6.2 (libaio-devel 0.3.107-10) 上运行通过
据此我封装了一个协程AIO的应用。

yulihua49 发表于 2017-02-07 21:15

windoze 发表于 2017-02-06 22:50
目前应该都是kernel aio了,除非你还在用2.4

libaio需要自己下载安装,好像没有在内核里。

windoze 发表于 2017-02-07 21:41

回复 6# yulihua49

kernel syscall都是有的,但io_xxx之类的东西在libaio里。话说现在是个linux都有这个东西了……

xinglp 发表于 2017-02-08 11:36

yulihua49 发表于 2017-02-07 21:12
后边那个不支持eventfd和epoll。
必须自己弄回调函数,他派生线程处理,没有办法封装成协程。
看看这个 ...

为什么要结合起来用呢? libaio也有一套循环等待方式吧

yulihua49 发表于 2017-02-08 11:41

本帖最后由 yulihua49 于 2017-02-08 11:51 编辑

xinglp 发表于 2017-02-08 11:36
为什么要结合起来用呢? libaio也有一套循环等待方式吧
你不会无缘无故的使用AIO吧?为了在IO期间解放线程吧?线程在解放之后干什么去了?如果线程还是在等待这个IO,异步有何意义?(明确告诉你,线程等待异步IO肯定比同步IO慢,)任务完成后如何通知线程进行继续处理。你怎么通知线程?
因为线程池协程框架是基于epoll的,一切IO活动,涉及挂起(设置epoll事件),解挂(epoll激活任务),等等线程管理都要服从epoll。
我是站在epoll的角度,看哪个AIO能够服从epoll的管理。

xinglp 发表于 2017-02-08 12:04

yulihua49 发表于 2017-02-08 11:41
你不会无缘无故的使用AIO吧?为了在IO期间解放线程吧?线程在解放之后干什么去了?如果线程还是在等待这 ...

这个aio自己不能等待一堆io么,就像epoll那样另外这个内核aio现在支持套接字了么
页: [1] 2
查看完整版本: libaio是glibc提供的还是kernel提供的?