加入收藏 | 设为首页 | 会员中心 | 我要投稿 淮安站长网 (https://www.0517zz.cn/)- 运营、云管理、经验、智能边缘、云硬盘!
当前位置: 首页 > 运营 > 正文

全球被感染物联网设备猛增100%

发布时间:2021-02-06 16:03:23 所属栏目:运营 来源:互联网
导读:前言 Java NIO 需要理解的主要有缓冲区,通道,选择器,这三个主要的部分。 基础 用户空间和内核空间 操作系统为了提供稳定性,把虚拟地址空间分为用户空间和内核空间,其中用户进程只能操作用户空间的内容,而内核空间的内容可以操作用户空间的内容以及用户

前言

Java NIO 需要理解的主要有缓冲区,通道,选择器,这三个主要的部分。

基础

用户空间和内核空间

操作系统为了提供稳定性,把虚拟地址空间分为用户空间和内核空间,其中用户进程只能操作用户空间的内容,而内核空间的内容可以操作用户空间的内容以及用户空间的内容。

I/O过程中的数据流向

假设我们需要从磁盘中的某个文件读取数据,进程发起read系统调用,进入内核状态,内核会随即向磁盘控制硬件发出命令,要求其从磁盘读取数据,磁盘控制器把数据直接写入到内核缓冲区中,随后内核会吧数据从内核空间的临时缓冲区拷贝到用户缓冲区,进程再次切换回用户态继续执行。总结数据流向是:磁盘 -> 内核缓冲区 -> 用户缓冲区

内存空间多重映射

对于虚拟地址的空间,一个以上的虚拟地址可以指向同一个物理内存地址。如果用户空间的虚拟地址和内核空间的虚拟地址映射到同一个物理地址,那么这块物理地址代表的空间就对内核和用户进程都可见。便可省去数据在内核缓冲区和用户缓冲区来回复制的开销。

缓冲区

Java NIO 数据传输过程,数据先放到发送缓冲区 -> 通过通道发送到接收端 -> 接受端通道接受数据并填充到接受缓冲区 所以缓冲区的作用其实是连接通道作为数据传输的目标或者来源。

核心概念

属性

需要理解Buffer工作机制,需要了解如下几个属性

  1. 容量: 缓冲区的容量,创建缓冲区时指定
  2. 位置: 下一个要被读取或者写入元素的索引
  3. 上界: 缓冲区中第一个不能被读或者写的位置。
  4. mark标记,一个备忘的位置

存取

缓冲区的核心就在于存取操作,buffer提供了相对位置存取和绝对位置存取两种方式。

  1. 相对位置存取:在当前的位置写入或者读取数据,然后增加位置的值。
  2. 绝对位置存取。在指定的位置的写入或者读取数据,不改变位置的值

代码如下
 

(4) 用户线程读取用户缓冲区的数据,完成后续的业务操作。

异步IO模型的特点:

  • 在内核kernel的等待数据和复制数据的两个阶段,用户线程都不是block(阻塞)的。用户线程需要接受kernel的IO操作完成的事件,或者说注册IO操作完成的回调函数,到操作系统的内核。所以说,异步IO有的时候,也叫做信号驱动 IO 。

异步IO模型缺点:

  • 需要完成事件的注册与传递,这里边需要底层操作系统提供大量的支持,去做大量的工作。

目前来说, Windows 系统下通过 IOCP 实现了真正的异步 I/O。但是,就目前的业界形式来说,Windows 系统,很少作为百万级以上或者说高并发应用的服务器操作系统来使用。

而在 Linux 系统下,异步IO模型在2.6版本才引入,目前并不完善。所以,这也是在 Linux 下,实现高并发网络编程时都是以 IO 复用模型模式为主。

(编辑:淮安站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读