网络通信优化之I/O模型:如何解决高并发下I/O瓶颈?
什么是 I/O
我们知道从字符到字节必须经过转码,这个过程非常耗时,如果我们不知道编码类型就很容易 出现乱码问题。所以 I/O 流提供了一个直接操作字符的接口,方便我们平时对字符进行流 操作。下面我们就分别了解下“字节流”和“字符流”。
1. 字节流
2. 字符流
Reader/Writer 是字符流的抽象类,这两个抽象类也派生出了若干子类,不同的子类分别 处理不同的操作类型,具体内容如下图所示:
在这个过程中,数据先从外部设备复制到内核空间,再从内核空间复制到用户空间,这就发 生了两次内存复制操作。这种操作会导致不必要的数据拷贝和上下文切换,从而降低 I/O 的性能。
2. 阻塞
如何优化 I/O 操作
面对以上两个性能问题,不仅编程语言对此做了优化,各个操作系统也进一步优化了 I/O。 JDK1.4 发布了 java.nio 包(new I/O 的缩写),NIO 的发布优化了内存复制以及阻塞导致的严重性能问题。JDK1.7 又发布了 NIO2,提出了从操作系统层面实现的异步 I/O。下面我们就来了解下具体的优化实现。
声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com