Chinaunix

标题: 大家有曾经见过使用aio的代码么? [打印本页]

作者: cxytz01    时间: 2013-07-17 10:37
标题: 大家有曾经见过使用aio的代码么?
本帖最后由 cxytz01 于 2013-07-17 10:39 编辑

大家有曾经见过使用aio的代码么?
看aio,都说aio没有完善的实现机制,还不够成熟,极少使用。请问哪位同仁有曾经见过aio的代码吗?
  1. man aio.h    --异步io
  2.               int      aio_cancel(int, struct aiocb *);
  3.               int      aio_error(const struct aiocb *);
  4.               int      aio_fsync(int, struct aiocb *);
  5.               int      aio_read(struct aiocb *);
  6.               ssize_t  aio_return(struct aiocb *);
  7.               int      aio_suspend(const struct aiocb *const[], int,
  8.                            const struct timespec *);
  9.               int      aio_write(struct aiocb *);
  10.               int      lio_listio(int, struct aiocb *restrict const[restrict], int,
  11.                            struct sigevent *restrict);
复制代码

作者: linux_c_py_php    时间: 2013-07-17 11:23
没见过,只是写磁盘比较高校。
作者: cxytz01    时间: 2013-07-17 11:32
回复 2# linux_c_py_php

不是写磁盘比较高效。

aio与非aio的read, write相比, read,write不管是否在阻塞与非阻塞模式下(fcntl, nonblock),在进行数据传输时1.read需要等待内核将数据copy到用户空间,这时read就必需等待这个过程的完成,也就是用户进程阻塞了。2.write也是如此,必需等待用户空间的数据copy到内核空间,write此时也会阻塞。

而aio的过程就不需要等待,当数据在用户空间和内核空间copy完成之后,会产生一个通知。


   
作者: linux_c_py_php    时间: 2013-07-17 12:30
cxytz01 发表于 2013-07-17 11:32
回复 2# linux_c_py_php

不是写磁盘比较高效。


你说的理论大家都懂的, proactor在linux下就是aio, 在win32下就是IOCP, 现在用epoll等都是reactor.

AIO之前就研究过一次, 据说对磁盘I/O有奇效, 网络没意义因为是看网速的.
作者: csumck    时间: 2013-07-17 16:02
沒用過,很早以前曾經想在服務程序上用下異步IO的,但是當時看到的文章都說異步IO在linux上還沒有完整的實現在網絡接口上,只能用於讀寫磁盤文件,對於我工作裏的應用沒啥意義。
作者: Carl01Zhang    时间: 2013-07-23 17:00


nignx里面有
作者: irp    时间: 2013-07-23 18:33
这是glibc里面的aio, 用thread来模拟实现的, 另名POSIX AIO, 不是true async io.  libaio里的是true aync io,  UNIX/Linux的kernel没有统一的io model, 普遍对aync io 支持的不好。
作者: linux_c_py_php    时间: 2013-07-23 18:45
给你个连接, 通过它你可以了解到AIO的历史:http://www.wzxue.com/linux-kerne ... %E5%A5%87%E8%91%A9/




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2