linux的I/O机制经历了一下几个阶段的演进: 1. 同步阻塞I/O: 用户进程进行I/O操作,一直阻塞到I/O操作完成为止。 2. 同步非阻塞I/O: 用户程序可以通过设置文件描述符的属性O_NONBLOCK,I/O操作可以立即返回,但是并不保证I/O操作成功。 3. 异步事件阻塞I/O: 用户进程可以对I/O事件进行阻塞,但是I/O操作并不阻塞。通过select/poll/epoll等函数调用来达到此目的。 4. 异步时间非阻塞I/O: 也叫做异步I/O(Aio),用户程序可以通过向内...
异步io是相对于同步io而言,主要用于提高系统利用率,和提高程序效率,异步io(aio)成了proix得一个标准,在linux2.6中引入了aio这个概念。solaris,freebsd也都对此进行了支持。 同步io一般在读写文件时会一直等待,等读写完成后,执行下一条语句。异步io就不同了,在进行读写文件操作时,程序会继续执行别的操作,等读写完成后利用回调函数或者信号通知主函数。 下面是使用aio的例子程序 #include stdio.h> #include un...
代码片段如下: (首先通过io_setup分配了i个异步io的请求空间) n1 = io_submit(pt_aio->ctx, i, pt_aio->iocbpp);//提交i个异步io请求 n2 = io_getevents(pt_aio->ctx, i, i, events, NULL);//等待被提交的io请求全部完成 其中i = 200, 其他参数也已经(我认为)成功赋值 但是返回值为 n1=54。 意思是不是说200个异步io请求中有54个已经被成功提交?那剩下的146个呢? 但是奇怪的是n2=200, 为什么明明只成功提交了54个异步io请...
本帖最后由 rick_cheung 于 2011-01-14 14:36 编辑
我想使用linux异步io 做一个写文件的测试,没有成功。请教各位原因何在。谢谢!
程序如下:
#include
Hello all: 关于linux下同步和异步io操作,我有一个疑问:针对异步io操作,linux专门提供了一组异步io操作函数族,即aio_xxx 问题是,对于普通io操作在open的时候,如果我没有指定NONBLOCK,那么对此文件描述符的操作就都是异步的(即进程并不会等待io操作完成才返回),那么这和用aio_xxx函数族有什么区别吗? 还是说aio_xxx函数族只是提供了另外一种方式?而这种方式不用aio_xxx还是可以实现?