全球被感染物联网设备猛增100%
|
前言 Java NIO 需要理解的主要有缓冲区,通道,选择器,这三个主要的部分。 基础 用户空间和内核空间 操作系统为了提供稳定性,把虚拟地址空间分为用户空间和内核空间,其中用户进程只能操作用户空间的内容,而内核空间的内容可以操作用户空间的内容以及用户空间的内容。 I/O过程中的数据流向 假设我们需要从磁盘中的某个文件读取数据,进程发起read系统调用,进入内核状态,内核会随即向磁盘控制硬件发出命令,要求其从磁盘读取数据,磁盘控制器把数据直接写入到内核缓冲区中,随后内核会吧数据从内核空间的临时缓冲区拷贝到用户缓冲区,进程再次切换回用户态继续执行。总结数据流向是:磁盘 -> 内核缓冲区 -> 用户缓冲区 内存空间多重映射 对于虚拟地址的空间,一个以上的虚拟地址可以指向同一个物理内存地址。如果用户空间的虚拟地址和内核空间的虚拟地址映射到同一个物理地址,那么这块物理地址代表的空间就对内核和用户进程都可见。便可省去数据在内核缓冲区和用户缓冲区来回复制的开销。 缓冲区 Java NIO 数据传输过程,数据先放到发送缓冲区 -> 通过通道发送到接收端 -> 接受端通道接受数据并填充到接受缓冲区 所以缓冲区的作用其实是连接通道作为数据传输的目标或者来源。 核心概念 属性 需要理解Buffer工作机制,需要了解如下几个属性
存取 缓冲区的核心就在于存取操作,buffer提供了相对位置存取和绝对位置存取两种方式。
代码如下 (4) 用户线程读取用户缓冲区的数据,完成后续的业务操作。 异步IO模型的特点:
异步IO模型缺点:
目前来说, Windows 系统下通过 IOCP 实现了真正的异步 I/O。但是,就目前的业界形式来说,Windows 系统,很少作为百万级以上或者说高并发应用的服务器操作系统来使用。 而在 Linux 系统下,异步IO模型在2.6版本才引入,目前并不完善。所以,这也是在 Linux 下,实现高并发网络编程时都是以 IO 复用模型模式为主。 (编辑:淮安站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
