首页
学习
活动
专区
圈层
工具
发布
    • 综合排序
    • 最热优先
    • 最新优先
    时间不限
  • 来自专栏大宽宽的碎碎念

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

    本文从操作系统的角度来解释BIO,NIO,AIO的概念,含义和背后的那些事。本文主要分为3篇。 大家都知道内存的读写延迟要比磁盘高2~3个数量级。对于磁盘数据,就可以长期的保存在Cache中。这样可以极大的提升磁盘IO读取的效率。 磁盘IO的优化 除非用Direct IO,对于磁盘IO的优化主要在读取操作上。这是因为写入时总是写到Page Cache,而写内存比写磁盘要高效的多。 从业务上讲,一般来讲上传文件的请求量要远远小于获取文件(图片、html、js、css……),所以在Web场景下,对磁盘IO的优化的主要思路其实很简单——尽量保证要读取的文件在内存里,而不是取磁盘上读取。 Linux AIO Linux中的另外一套AIO接口被称为Linux AIO,是Linux在内核实现的一套AIO接口。这套是"真・AIO"。接口的详细用法可以参考这里。

    4.6K90发布于 2018-05-14
  • 来自专栏子木聊出海

    在 GEO AIO 角度:如何优化 SEO 内容?

    一、先把优化方向说清楚现在做内容的目标不仅仅是 SEO 排第几,而是被选进 AI 答案。AI 搜索会把页面切成可复用的小块,再按权威与相关性拼答案。 H2/H3 像目录切块:一块只回答一个问题,边界清晰。结论盒放在首屏:一两句把答案点明,配 1–2 个关键数据点。Q&A 模块:高频问题用“问–答”直出,便于整句抽取。 3. H2/H3 是否把问题切清楚?是否提供 3–5 组真实 Q&A?是否有对比表或步骤列表且自洽?是否添加并通过相应 Schema 校验?关键信息是否都在可见 HTML,而非图片/Tab/PDF? 从一页开始改:加结论盒,按意图重排 H2/H3,补 Q&A 和表格;挂对路的 Schema。发布后 72 小时看收录与点击,再小步快迭代。

    21610编辑于 2025-10-23
  • 来自专栏Linux内核那些事

    Linux 原生 AIO 实现(Native AIO

    本文基于 Linux-2.6.0 版本内核源码 一般来说,使用 Linux 原生 AIO 需要 3 个步骤: 1) 调用 io_setup 函数创建一个一般 IO 上下文。 3) 调用 io_getevents 函数获取异步 IO 操作结果。 所以,我们可以通过分析这三个函数的实现来理解 Linux 原生 AIO 的实现。 ret = -EINVAL; // 发起异步IO操作, 会根据不同的文件系统调用不同的函数: // 如ext3文件系统会调用 generic_file_aio_read 不同的文件系统,其 aio_read 方法的实现不一样,如 Ext3 文件系统的 aio_read 方法会指向 generic_file_aio_read 函数。 否则就代表 IO 操作已经完成,那么就调用 aio_complete 函数完成收尾工作。 io_submit_one 函数的操作过程如 图3 所示: ?

    3.1K30发布于 2021-04-08
  • 来自专栏小小码农一个。

    BIO,NIO,AIO总结

    Java 中的 BIO、NIO和 AIO 理解为是 Java 语言对操作系统的各种 IO 模型的封装。 在讲 BIO,NIO,AIO 之前先来回顾一下这样几个概念:同步与异步,阻塞与非阻塞。 同步与异步 同步: 同步就是发起一个调用后,被调用者未处理完请求之前,调用不返回。 伪异步 IO 为了解决同步阻塞I/O面临的一个链路需要一个线程处理的问题,后来有人对它的线程模型进行了优化一一一后端通过一个线程池来处理多个客户端的请求接入,形成客户端个数M:线程池最大线程数N的比例关系

    1.1K10发布于 2020-06-08
  • 来自专栏若尘的技术专栏

    BIO、NIO、AIO

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

    93975发布于 2021-11-25
  • 来自专栏宇宙之_一粟

    BIO、NIO、AIO

    16.BIO、NIO、AIO 有什么区别? BIO:Block IO 同步阻塞式 IO,就是我们平常使用的传统 IO,它的特点是模式简单使用方便,并发处理能力低。 AIO:Asynchronous IO 是 NIO 的升级,也叫 NIO2,实现了异步非堵塞 IO ,异步 IO 的操作基于事件和回调机制。

    74021发布于 2020-10-26
  • 来自专栏JavaEdge

    BIO NIO AIO演变1 BIO2 NIO3 AIO4 常见面试题5 总结

    打开服务器通道(网络读写通道) ServerSocketChannel channel = ServerSocketChannel.open(); // 3. IP_ADDRESS, PORT); // 2.声明一个连接通道 SocketChannel socketChannel = null; // 3. AIO NIO2.0 是一种非阻塞异步的通信模式。 AIO服务端代码,负责创建服务器通道,绑定端口,等待请求。 3 AIO模型中通过AsynchronousSocketChannel和AsynchronousServerSocketChannel完成套接字通道实现。非阻塞,异步。 ?

    1.6K30发布于 2018-08-10
  • 来自专栏精讲JAVA

    Java新一代网络编程模型AIO原理及Linux系统AIO介绍

    所以本文也附带介绍了Linux 2.6及以后版本新增的AIO特性(因为这跟Java AIO是对应关系)。 Java AIO 1基本原理 目前为止,Java共支持3种网络编程模型:BIO、NIO、AIO: Java BIO : 同步并阻塞,服务器实现模式为一个连接一个线程,即客户端有连接请求时服务器端就需要启动一个线程进行处理 Linux AIO 1Linux AIO 简介 Linux 异步 I/O 是 Linux 内核中提供的一个相当新的增强。 正如图 3 所示的一样,这个方法可以引入 I/O 操作的延时,因为数据在内核中变为可用到用户调用 read 返回数据之间存在一定的间隔,这会导致整体数据吞吐量的降低。 3异步 I/O(AIO) 的动机 从前面 I/O 模型的分类中,我们可以看出 AIO 的动机。这种阻塞模型需要在 I/O 操作开始时阻塞应用程序。这意味着不可能同时重叠进行处理和 I/O 操作。

    2.1K80发布于 2018-01-30
  • 来自专栏SpringCloud专栏

    聊聊BIO,NIO和AIO (2)

    大家都知道内存的读写延迟要比磁盘高2~3个数量级。对于磁盘数据,就可以长期的保存在Cache中。这样可以极大的提升磁盘IO读取的效率。 磁盘IO的优化 除非用Direct IO,对于磁盘IO的优化主要在读取操作上。这是因为写入时总是写到Page Cache,而写内存比写磁盘要高效的多。 从业务上讲,一般来讲上传文件的请求量要远远小于获取文件(图片、html、js、css……),所以在Web场景下,对磁盘IO的优化的主要思路其实很简单——尽量保证要读取的文件在内存里,而不是取磁盘上读取。 POSIX AIO 第一套被称作POSIX AIO。顾名思义,这套接口是POSIX标准规定的。这套AIO的接口的定义可以参考这里。 Linux AIO Linux中的另外一套AIO接口被称为Linux AIO,是Linux在内核实现的一套AIO接口。这套是"真・AIO"。接口的详细用法可以参考这里。

    1.6K20发布于 2019-07-12
  • 来自专栏SpringCloud专栏

    聊聊BIO,NIO和AIO (1)

    fd数组按照监听的事件分为了3个数组,为了这3个数组要分配3段内存去构造,而且每次调用select前都要重设它们(因为select会改这3个数组);调用select后,这3数组要从用户态复制一份到内核态 ;事件到达后,要遍历这3数组。 poll优化了select的一些问题。比如不再有3个数组,而是1个polldfd结构的数组了,并且也不需要每次重设了。数组的个数也没有了1024的限制。 第二个参数op表示如何对文件名进行操作,共有3种。 在时刻t2时,两个fd都到了100bytes数据,于是在时刻t3, epoll_wait返回了两个fd进行处理。在t4,我们故意不读取所有的数据出来,只各自读50bytes。

    88630发布于 2019-07-12
  • 来自专栏九州牧云

    Java IO: BIO, NIO, AIO

    BIO, NIO, AIO,本身的描述都是在Java语言的基础上的。 而描述IO,我们需要从三个层面: 编程语言 实现原理 底层基础 从编程语言层面 BIO, NIO, AIO以Java的角度理解: BIO,同步阻塞式IO,简单理解:一个连接一个线程 NIO,同步非阻塞IO 而AIO,在windows上是通过IOCP实现的,在linux上还是通过epoll来实现的。 这里强调一点:AIO,这是I/O处理模式,而epoll等都是实现AIO的一种编程模型;换句话说,AIO是一种接口标准,各家操作系统可以实现也可以不实现。 Linux上还没有真正实现网络方式的AIO

    86440发布于 2019-08-21
  • 来自专栏lgp20151222

    BIO,NIO,AIO的理解

    AIO(NIO.2):异步非阻塞式IO,服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由OS先完成了再通知服务器应用去启动线程进行处理。

    72810发布于 2018-09-10
  • 来自专栏java学习java

    简单谈谈BIO,NIO,AIO

    ---- IO 概述 IO 的操作方式通常分为几种:同步阻塞 BIO、同步非阻塞 NIO、异步非阻塞 AIO。 (1)在 JDK1.4 之前,我们建立网络连接的时候采用的是 BIO 模式。 (3AIO 也就是 NIO 2,在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞的IO 模型。 NIO 中实现非阻塞 I/O 的核心对象就是 Selector,Selector 就是注册各种 I/O 事件地方,而且当我们感兴趣的事件发生时,就是这个对象告诉我们所发生的事件, 如下图所示:  (3) 异步非阻塞 IO(AIO) (1)AIO 也就是 NIO 2,在 Java 7 中引入了 NIO 的改进版 NIO 2,它是异步非阻塞 的 IO 模型。 (2)Java 的 AIO API 其实就是 Proactor 模式的应用,和 Reactor 模式类似。

    55850编辑于 2023-10-15
  • 来自专栏YoungGy

    优化3】非线性优化

    凸集和凸函数 SOCP Guideline

    87360发布于 2018-01-02
  • 来自专栏java 成神之路

    IO、NIO、AIO 内部原理分析

    ---- 下面分析下 阻塞I/O、NIO、AIO的数据处理流程 阻塞I/O 数据处理流程 ? 3.AIO 数据处理流程 ? AIO 实现原理 程序调用AIO的accept方法并传入Completionhandler,该方法是非阻塞方法。 程序只需要把具体的操作告知AIO就可以了,具体操作AIO来帮助你来操作。 NIO 和 AIO 性能上对比 AIO在性能上相对于NIO没有本质的提升。 AIO只是帮助你从内核中将数据复制到用户空间中,并调用你传入的回调方法。 NIO 是需要程序自己从内核中将数据复制到用户空间中,并需要程序自己调用相应的处理逻辑。 ----

    1.1K60发布于 2018-05-18
  • 来自专栏用户5325874的专栏

    BIO、NIO、AIO原理及总结

    //2 打开服务器通道 ServerSocketChannel ssc = ServerSocketChannel.open(); //3 异步非阻塞 AIO (NIO.2) 原理 服务器实现模式为一个有效请求一个线程,客户端的I/O请求都是由操作系统先完成了再通知服务器应用去启动线程进行处理。 AIO方式使用于连接数目多且连接比较长(重操作)的架构,比如相册服务器,充分调用操作系统参与并发操作,编程比较复杂,JDK7开始支持。 所以出现AIO。 如果你理解了Java NIO ,下面讲的netty也是水到渠成的事,只想说,深水区已过了! 差点忘记还要补下AIO的,这个比NIO先进的技术,最终实现了netty。 、AIO适用场景

    1K20发布于 2020-04-13
  • 来自专栏Java基础

    【关于Java的BIO、NIO、AIO

    面试官问:“说说 BIO、NIO、AIO 的区别?” 你脑子里蹦出几个词:“阻塞”、“非阻塞”、“异步”,但串不起来,说不完整…… 一、先搞懂:BIO、NIO、AIO 到底是谁? 缓冲区) —— 数据的“中转站” 所有数据必须通过 Buffer 读写 常见类型:ByteBuffer、CharBuffer 等 核心方法:flip()(读写切换)、clear()、compact() 3. 五、BIO、NIO、AIO 对比总结 特性 BIO NIO AIO 模型 同步阻塞 同步非阻塞 异步非阻塞 核心机制 每连接一线程 多路复用(Selector) 回调 / Future 是否阻塞 是(read Q3: Selector 是如何实现多路复用的? 答: Selector 底层依赖操作系统提供的 epoll(Linux) 或 kqueue(Mac) 等机制。 谁性能最强 理论 AIO > NIO > BIO,但实际 NIO 最常用 面试怎么说 “我理解 NIO 的多路复用原理,项目用 Netty(NIO)做高性能通信” 最后一句话 BIO、NIO、AIO

    45210编辑于 2025-08-28
  • 来自专栏即时通讯技术

    到底什么是Java AIO?为什么Netty会移除AOI?一文搞懂AIO的本质!

    2)Java AIO又称为NIO 2.0,难道它也是基于NIO来实现的? 3)Netty为什么会舍去了AIO的支持?(点此查看); 4)AIO看起来貌似只是解决了有无,实际是发布了个寂寞? 3、Java BIO和NIO到底是同步还是异步? Java BIO和NIO到底是同步还是异步,我们先按照异步这个思路,做异步编程。 7、 AIO示例引发思考3:监听回调的本质是什么? 系统调用执行过程: 1)传递系统调用参数; 2)执行陷入指令,用用户态切换到核心态(这是因为系统调用一般都需要再核心态下执行); 3)执行系统调用程序; 4)返回用户态。 在AIO中就是EPoll.ctl(...)注册事件; 2)保安在门口蹲着相当于监听事件,在AIO中就是Thread-0线程,做EPoll.wait(..); 3)快递员把电视送到门口,相当于有IO事件到达

    75120编辑于 2023-06-21
  • 来自专栏nnngu

    013 BIO、NIO、AIO的区别

    IO通常分为几种,BIO(阻塞 Blocking IO)、NIO(非阻塞 Non-Blocking IO)、AIO(异步非阻塞)。 AIO AIO没有前两者普及,暂不讨论!

    1.5K90发布于 2018-03-15
  • 来自专栏python3

    mysql优化3

    3)配置示例 mysql> show variables like '%query_cache%' ; +------------------------------+---------+ | Variable_name

    73410发布于 2020-01-09
领券