linux异步io
A. 关于linux下的异步io,有几个疑问
lsof 是一个列出当前系统打开文件的工具。在linux环境下,任何事物都以文件的形式存在,通过文件不仅仅可以访问常规数据,还可以访问网络连接和硬件。 常用的参数列表 lsof filename 显示打开指定文件的所有进程 lsof -a 表示两个参数都必须满足...
B. 如何查看linux是否开启异步IO
查看linux是否开启异步IO命令如下:
[DATA@localhost ~]$ cat /proc/slabinfo | grep kio
kioctx 37 140 384 10 1 : tunables 54 27 8 : slabdata 14 14 0
kiocb 0 0 256 15 1 : tunables 120 60 8 : slabdata 0 0 0
返回结果中kiocp对应的前两项为0,说明系统中没有使用异步io。
C. 想问一下io是什么
io是输入输出InputOutput。分为IO设备和IO接口两个部分。在POSIX兼容的系统上,例如Linux系统,IO操作可以有多种方式,比如DIODirectIO,AIOAsynchronousIO,异步IO,MemoryMappedIO内存映射IO,不同的IO方式有不同的实现方式和性能,在不同的应用中可以按情况选择不同的IO方式。
io的作用
IO系统管理的主要对象是IO设备和相应的设备控制器。其主要作用是完成用户的IO请求,提高IO速率,以及提高设备的利用率,并为高层的进程提供方便的接口。IO接口又称为输入输出接口,是信息处理系统与外部世界之间的通信。输入是系统接收的信号或数据,输出是从其发送的信号或数据。
D. linux异步IO怎么理解
就是IO不阻塞即使没有数据可读,或者空间可写时。异步IO都返回,不管如何情况。简单点的意思就是进程不会阻塞在你读写调用异步IO系统调用的时候。所以你的执行流可以去做其它的事情,当你确实要确认数据读写成功的时候,你在用aio_return这个函数去判断读写成功了吗。如果你想耗费cpu那你就一值调用aio_return轮询结果。如果想睡眠等待读写完成,那么你调用aio_suspend这个函数,你就会睡眠,当读写完成时,内核会发信号给你,这时,就会执行信号处理函数,并唤醒此进程。要充分理解异步IO,最好把信号和异步通知一起搞懂。如果会写驱动的话,最好自己去实现IO的这些功能,比如阻塞IO,非阻塞IO,轮询,异步通知,异步IO等等,其中又涉及到并发和竞争的问题。
E. 什么是“同步IO”和“异步IO”
同步IO在同一时刻只允许一个IO操作,也就是说对于同一个文件句柄的IO操作是序列化的,即使使用两个线程也不能同时对同一个文件句柄同时发出读写操作。重叠IO允许一个或多个线程同时发出IO请求。
异步IO的概念和同步IO相对。当一个异步过程调用发出后,调用者不能立刻得到结果。实际处理这个调用的部件在完成后,通过状态、通知和回调来通知调用者。在一个CPU密集型的应用中,有一些需要处理的数据可能放在磁盘上。预先知道这些数 据的位置,所以预先发起异步IO读请求。等到真正需要用到这些数据的时候,再等待异步IO完成。使用了异步IO,在发起IO请求到实际使用数据这段时间 内,程序还可以继续做其他事情。
F. linux同步io和异步io的区别
异步文件IO也就是重叠IO。
在同步文件IO中,线程启动一个IO操作然后就立即进入等待状态,直到IO操作完成后才醒来继续执行。而异步文件IO方式中,线程发送一个IO请求到内核,然后继续处理其他的事情,内核完成IO请求后,将会通知线程IO操作完成了。
如果IO请求需要大量时间执行的话,异步文件IO方式可以显着提高效率,因为在线程等待的这段时间内,CPU将会调度其他线程进行执行,如果没有其他线程需要执行的话,这段时间将会浪费掉(可能会调度操作系统的零页线程)。如果IO请求操作很快,用异步IO方式反而还低效,还不如用同步IO方式。
同步IO在同一时刻只允许一个IO操作,也就是说对于同一个文件句柄的IO操作是序列化的,即使使用两个线程也不能同时对同一个文件句柄同时发出读写操作。重叠IO允许一个或多个线程同时发出IO请求。
G. linux 异步i/o和信号驱动i/o的区别
这里假设你指的异步I/O是针对的文件描述符,而信号驱动IO面向的是读写信号本身。
比较典型的例子是select和epoll的对比。使用select之前需要预先添加你所有感兴趣的文件描述符,然后再遍历这些文件描述符,找出其中有读写事件的fd,之后再对这些活跃的fd做处理。相比而言,epoll会高效得多:每当有一个fd的读写事件,内核则把该fd添加进一个事件列表,在使用的时候你只需要去取到这个事件列表(一个链表的数据结构)即可做相应操作。
这样说来,就是上面说的,一个是扫描的文件描述符再判断该文件描述符是否需要处理,这个是fd驱动;一个是直接取到有事件发生的文件描述符,也就是信号,或者说是事件驱动。
H. 在UNIX/linux中有4中IO模型还是5种IO模型
有5种模型.
常用异步IO的路过一下. SIGIO是需要用到信号量的, 资源太受限制. 而常说的这个异步IO这个是操作系统底层通过fd上可都可写的事件来进行边缘触发或者电平触发, 直接进入回调函数的高效处理方法, 比如说epoll或者kqueue, 不过这个算是相对比较新的技术, 比如说epoll是linux2.6+才有的技术, 在那之前一般用的是多路复用.
I. Linux中异步IO模型有哪些
1)阻塞I/O(blocking I/O)
2)非阻塞I/O (nonblocking I/O)
3) I/O复用(select 和poll) (I/O multiplexing)
4)信号驱动I/O (signal driven I/O (SIGIO))
5)异步I/O (asynchronous I/O (the POSIX aio_functions))
其中前4种都是同步,最后一种才是异步。