首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Linux 原生 AIO 实现(Native AIO

上一篇文章 主要分析了 Linux 原生 AIO 的原理和使用,而这篇要介绍的是 Linux 原生 AIO 的实现过程。...本文基于 Linux-2.6.0 版本内核源码 一般来说,使用 Linux 原生 AIO 需要 3 个步骤: 1) 调用 io_setup 函数创建一个一般 IO 上下文。...所以,我们可以通过分析这三个函数的实现来理解 Linux 原生 AIO 的实现。 Linux 原生 AIO 实现在源码文件 /fs/aio.c 中。...总结 本文主要分析了 Linux 原生 AIO 的实现,但为了不陷入太多的实现细节中,本文并没有涉及到磁盘 IO 相关的知识点。...然而磁盘 IO 也是 AIO 实现中不可或缺的一部分,所以有兴趣的朋友可以继续通过阅读 Linux 的源码来分析其实现原理。

2.5K20
您找到你想要的搜索结果了吗?
是的
没有找到

聊聊BIO,NIO和AIO (2)磁盘IO磁盘IO的优化AIO反思AIO

所以,对于POSIX AIO大家看看就好。Linux下实际使用比较多的是Linux AIO。...Linux AIO Linux中的另外一套AIO接口被称为Linux AIO,是Linux在内核实现的一套AIO接口。这套是"真・AIO"。接口的详细用法可以参考这里。...我这里给出一个极度精简版的例子,里面所有的错误处理都被我忽略了,只是想体现一下Linux AIO的使用方式: aio_context_t ctx; struct iocb cb; struct iocb...的事件 i += r; finished_aio -= r; } } } 上面的例子首先创建了一个eventfd,并且挂到了AIO...看看上面的例子,是不是非常容易晕。而这些已经是非常简化的例子了,现实中的代码要处理相当多的细节; 不用在AIO和Buffered IO中做取舍。

3.9K90

Linux 原生异步 IO 原理与使用(Native AIO

Linux 原生 AIO 原理 Linux Native AIOLinux 支持的原生 AIO,为什么要加原生这个词呢?...本文主要介绍 Linux 原生 AIO 的原理和使用,所以不会对其他第三方的异步 IO 库进行分析,下面我们先来介绍 Linux 原生 AIO 的原理。 如 图2 所示: ?...Linux 原生 AIO 使用 在介绍 Linux 原生 AIO 的实现之前,先通过一个简单的例子来介绍其使用过程: #define _GNU_SOURCE #include #...在上面的例子中,我们获取异步 IO 操作的结果是在一个无限循环中进行的,其实 Linux 还支持一种基于 eventfd 事件通知的机制,可以通过 eventfd 和 epoll 结合来实现事件驱动的方式来获取异步...总结 本文主要介绍了 Linux 原生 AIO 的原理和使用,Linux 原生 AIO 的使用比较简单,但其内部实现比较复杂,在下篇文章中将会介绍 Linux 原生 AIO 的实现。

3.3K10

BIO、NIO、AIO

以上的两组概念可以两两组合,就组合了我们熟悉的BIO、NIO、AIO。 3....异步非阻塞I/O(AIO): 异步非阻塞I/O,服务器实现模式为一个有效请求一个线程,客户端的IO请求都是由操作系统先完成了再通知服务器用其启动线程进行处理。...AIO方式适用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用OS参与并发操作,编程比较复杂,jdk1.7开始支持。...接下来用一个有味道的例子来描述一下以上的IO模型 BIO:去上厕所,坑位全满,此时我光等着,什么都不能做。主动观察哪个坑位好了,只要有坑位释放了,我就去占坑。...AIO:我在厕所外做别的事,等有人来通知我了我再去占坑。

68375

linux AIO -- libaio 实现的异步 IO 简介及实现原理

1. linux AIO — libaio 实现的异步 IO POSIX AIO 是在用户控件模拟异步 IO 的功能,不需要内核支持,而 linux AIO 则是 linux 内核原声支持的异步 IO...关于 linux IO 模型及 AIO、POSIX AIO 的简介,请参看上一篇文章 libaio 实现的异步 IO 主要包含以下接口: libaio 实现的异步 IO 函数 功能 原型 io_setup...异步 IO 上下文 aio_context_t 即 AIO 上下文句柄,该结构体对应内核中的一个 struct kioctx 结构,用来给一组异步 IO 请求提供一个上下文环境,每个进程可以有多个 aio_context_t...与 POSIX AIO 区别 从上图中的流程就可以看出,linux 版本的 AIO 与 POSIX 版本的 AIO 最大的不同在于 linux 版本的 AIO 实际上利用了 CPU 和 IO 设备异步工作的特性...POSIX AIO 支持非 direct-io,而且实现非常灵活,可配置性很高,可以利用内核提供的page cache来提高效率,而 linux 内核实现的 AIO 就只支持 direct-io,cache

2.7K30

聊聊BIO,NIO和AIO (1)

Linux认为: 对于第一种情况,算作block,因为Linux无法知道网络上对方是否会发数据。如果没数据发过来,对于调用read的程序来说,就只能“等”。...因为大部分情况下我会用Linux做服务器,所以下文以Linux epoll为例子来解释多路复用是怎么工作的。 用epoll实现的IO多路复用 epoll是Linux下的IO多路复用的实现。...而一旦在注册事件时使用了EPOLLET标记(如上文中的例子),那么将其视为边沿触发(或者有地方叫边缘触发,一个意思)。那么到底什么水平触发和边沿触发呢? 考虑下图中的例子。...这个例子很明确的显示了水平触发和边沿触发的区别。 水平触发只关心文件描述符中是否还有没完成处理的数据,如果有,不管怎样epoll_wait,总是会被返回。...如果你留意到上文例子中的“处理事件”代码,就会发现这里可能是有问题的。

75230
领券