异步IO和同步IO概念学习
Posted wenzhongyan
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了异步IO和同步IO概念学习相关的知识,希望对你有一定的参考价值。
I/O 既 输出/输入 (Input/Output)
既然是输入输出,为什么又会有同步和异步的不同方式呢?
同步 当一个IO操作进行时,系统停下来等待这个IO的操作完成后才会继续进行下面的计算。
异步 当一个IO操作进行时,通过多线程等方法,当CPU去处理那些不需要依赖IO执行结果的计算,充分的利用CPU的运算能力。当IO操作执行完毕时,继续执行后续的操作。
一般情况下,作为单机程序或者IO反应速度非常快等待时间非常短,使用“同步”方式对于编程的稳定性、简单性都是很好的选择,一个操作完成后再去执行其他的操作。
但是如果IO的等待时间比较长,比如打印机、慢速网络,“异步”方式就会显得非常重要了。
想象一下,如果打印机开始打印Word就不能进行任何的操作,用户岂不是要等的心发慌?
异步操作 往往是和多线程 并行 密切相关的,也是目前多路、多核CPU能够释放威力的强大武器
异步I/O的优点:异步I/O是和同步I/O相比较来说的,如果是同步I/O,当一个I/O操作执行时,应用程序必须等待,直到此I/O执行完。相反,异步I/O操作在后台运行,I/O操作和应用程序可以同时运行,提高了系统性能;使用异步I/O会提高I/O流量,如果应用是对裸设备进行操作,这种优势更加明显, 因此像数据库,文件服务器等应用往往会利用异步I/O,使得多个I/O操作同时执行. 而且从官方文档来看,ORACLE也是推荐ORACLE数据库启用异步IO的这个功能的。
根据文档[Note 370579.1] ,可以通过查看slabinfo统计信息查看操作系统中AIO是否运行,slab是Linux的内存分配器,AIO相关的内存结构已经分配,kiocb值的第二列和第三列非0即是已使用
[root@DB-Server ~]# cat /proc/slabinfo | grep kio
kioctx 62 110 384 10 1 : tunables 54 27 8 : slabdata 11 11 0
kiocb 0 0 256 15 1 : tunables 120 60 8 : slabdata 0 0 0
kiocb值的第二列和第三列非0表示系统已经启用异步IO。如上所示,表示异步I/O没有在使用。
SQL> alter system set filesystemio_options = setall scope=spfile;
System altered.
SQL> alter system set disk_asynch_io = true scope=spfile;
System altered.
关于参数filesystemio_options有四个值: asynch、directio, setall,none. 一般建议设置为setall比较合适。
You can use the FILESYSTEMIO_OPTIONS initialization parameter to enable or disable asynchronous I/O or direct I/O on file system files. This parameter is platform-specific and has a default value that is best for a particular platform. It can be dynamically changed to update the default setting.
FILESYTEMIO_OPTIONS can be set to one of the following values:
· ASYNCH: enable asynchronous I/O on file system files, which has no timing requirement for transmission.
在文件系统文件上启用异步I/O,在数据传送上没有计时要求。
· DIRECTIO: enable direct I/O on file system files, which bypasses the buffer cache.
在文件系统文件上启用直接I/O,绕过buffer cache。
· SETALL: enable both asynchronous and direct I/O on file system files.
在文件系统文件上启用异步和直接I/O。
· NONE: disable both asynchronous and direct I/O on file system files.
在文件系统文件上禁用异步和直接I/O。
设置完成后重启数据库,验证异步IO特性是否启用。如下所示, kiocb的第二、三列都不为0,表示ORACLE的异步IO特性已经启用。
[oracle@DB-Server ~]$ cat /proc/slabinfo | grep kio
kioctx 60 80 384 10 1 : tunables 54 27 8 : slabdata 8 8 0
kiocb 6 30 256 15 1 : tunables 120 60 8 : slabdata 2 2 0
[oracle@DB-Server ~]$
以上是关于异步IO和同步IO概念学习的主要内容,如果未能解决你的问题,请参考以下文章