4.3.2 从buf与IO看改进---异步IO
与IO相关的操作,如上图所示。
其中,分为两种方式的读写:逻辑IO和物理IO。
逻辑IO,是数据据访问层向缓存区读写数据的操作,请求数据,称为逻辑读;写入数据,称为逻辑写。
物理IO,是数据缓冲区向外存读写数据的操作,请求数据,称为物理读;写入数据,称为物理写。
物理层的读写,是通过smgr接口进行的。调用序列如下:
ReadBufferàReadBuffer_commonàsmgrreadàmdread;
FlushBufferàsmgrwriteàmdwrite
而阅读md.c中的代码,可以发现,物理读写操作,都是通过调用C的库函数read和write等实现的(注意win32.h中,read和write实际是_read和_write)。
而read和write都是同步的方式进行读写的,所以,物理IO有可能有改进的方式,改法是,在smgr层,实现异步IO[1]操作。然后在数据缓冲区层改造buf的管理方式,使之能适应异步IO(AIO)。比如,加入预读方式等。
Linux的AIO 在 2.5 版本的内核中首次出现,现在已经是 2.6 版本的产品内核的一个标准特性了。
如果数据存储层的物理IO改写为异步IO,还需要封装一套屏蔽多操作系统的接口,供上层的数据缓冲区层调用,这里不再展开。[1] http://www.ibm.com/developerworks/cn/linux/l-async/ linux下异步IO
http://blog.csdn.net/bokee/article/details/5268894 windows下异步IO