
io
文章平均质量分 93
chuixue24
这个作者很懒,什么都没留下…
展开
-
深入理解 Linux 的 I/O 系统
是操作系统对文件的缓存,用来减少对磁盘的 I/O 操作,以页为单位的,内容就是磁盘上的物理块,页缓存能帮助程序对文件进行顺序读写的速度几乎接近于内存的读写速度,主要原因就是由于 OS 使用 PageCache 机制对读写访问操作进行了性能优化。在 Linux 系统中,传统的访问方式是通过 write() 和 read() 两个系统调用实现的,通过 read() 函数读取文件到到缓存区中,然后通过 write() 方法把缓存中的数据输出到网络端口。中间的黑色实线是用户态和内核态的分界线。转载 2024-05-06 15:11:39 · 117 阅读 · 1 评论 -
零拷贝技术分类
Zero-copy, 就是在操作数据时, 不需要将数据 buffer 从一个内存区域拷贝到另一个内存区域. 因为少了一次内存的拷贝, 因此 CPU 的效率就得到的提升.在 OS 层面上的Zero-copy通常指避免在 用户态(User-space) 与内核态(Kernel-space) 之间来回拷贝数据。Netty 中的 Zero-copy 与 OS 的 Zero-copy 不太一样, Netty的Zero-coyp。转载 2023-11-01 11:27:19 · 525 阅读 · 0 评论 -
五大IO模型
对程序员而言,I/O操作是程序中最常见的操作之一。比如说磁盘文件的读写、数据的网络传输等等。程序=数据结构+算法,其中数据元素的获取就必须通过I/O操作来完成。在当今这个数据大爆炸时代,I/O问题尤其突出,很容易成为一个性能瓶颈。然而很多程序员甚至是高级程序员对I/O操作只是停留在会用的阶段,遇到相应的业务场景只是去COPY一段代码,小型项目这样当然没问题,对于I/O密集型的项目,如果理解不深,有可能会造成严重的问题。实际工作中我也是这样,经常在网上找一段代码不去分析他的原理,从而走了不少弯路。作为Ja.转载 2022-03-11 15:39:46 · 343 阅读 · 0 评论 -
java的IO模型
IO模型 IO模型就是说用什么样的通道进行数据的发送和接收,Java共支持3种网络编程IO模式:BIO,NIO,AIO。BIO(Blocking IO) 同步阻塞模型,一个客户端连接对应一个处理线程 BIO代码示例:package com.tuling.bio; import java.io.IOException; import java.net.ServerSocket; import java.net.Socket; public class SocketS原创 2021-11-04 13:36:26 · 654 阅读 · 1 评论 -
零拷贝原理详解
引言传统的 Linux 操作系统的标准 I/O 接口是基于数据拷贝操作的,即 I/O 操作会导致数据在操作系统内核地址空间的缓冲区和应用程序地址空间定义的缓冲区之间进行传输。这样做最大的好处是可以减少磁盘 I/O 的操作,因为如果所请求的数据已经存放在操作系统的高速缓冲存储器中,那么就不需要再进行实际的物理磁盘 I/O 操作。但是数据传输过程中的数据拷贝操作却导致了极大的 CPU 开销,限制了操作系统有效进行数据传输操作的能力。零拷贝( zero-copy )技术可以有效地改善数据传输的性能,在内核驱动转载 2021-03-24 10:59:08 · 640 阅读 · 0 评论 -
网络io模型
首先引用levin的回答让我们理清楚五种IO模型1.阻塞I/O模型老李去火车站买票,排队三天买到一张退票。耗费:在车站吃喝拉撒睡 3天,其他事一件没干。2.非阻塞I/O模型老李去火车站买票,隔12小时去火车站问有没有退票,三天后买到一张票。耗费:往返车站6次,路上6小时,其他时间做了好多事。3.I/O复用模型1.select/poll老李去火车站买票,委托黄牛,然后每...转载 2019-04-22 18:59:09 · 128 阅读 · 0 评论 -
5种网络IO模型
同步(synchronous) IO和异步(asynchronous) IO,阻塞(blocking) IO和非阻塞(non-blocking)IO分别是什么,到底有什么区别?这个问题其实不同的人给出的答案都可能不同,比如wiki,就认为asynchronous IO和non-blocking IO是一个东西。这其实是因为不同的人的知识背景不同,并且在讨论这个问题的时候上下文(context)也不...转载 2019-04-22 18:57:40 · 204 阅读 · 0 评论 -
JAVA NIO之浅谈内存映射文件原理与DirectMemory
JAVA类库中的NIO包相对于IO 包来说有一个新功能是内存映射文件,日常编程中并不是经常用到,但是在处理大文件时是比较理想的提高效率的手段。本文我主要想结合操作系统中(OS)相关方面的知识介绍一下原理。 在传统的文件IO操作中,我们都是调用操作系统提供的底层标准IO系统调用函数 read()、write() ,此时调用此函数的进程(在JAVA中即java进程)由当前的用户态切换到内核态,然...转载 2018-05-04 13:44:33 · 154 阅读 · 0 评论 -
Java NIO直接缓冲区与非直接缓冲区区别
物理磁盘->内核地址空间->用户地址空间->应用程序OS -> JVM直接缓冲区内核地址空间和用户地址空间之间形成了一个物理内存映射文件,减少了之间的copy过程。存在风险:用于不易控制GCpackage com.expgiga.NIO;import java....转载 2018-05-04 13:30:33 · 211 阅读 · 0 评论 -
io存取速度
Google的Jeff Dean给的一些数据(一个talk的ppt, "Designs, Lessons and Advice from Building Large Distributed Systems" 23页),可以看到1Gbps的网络比硬盘的bandwidth高了很多,记住这些数据对设计高性能系统和对系统的性能估算很有帮助。L1 cache reference 0.5 nsBranch ...转载 2018-04-21 14:17:07 · 563 阅读 · 0 评论