zoukankan      html  css  js  c++  java
  • 1、nio说明 和 对比bio

    nio和bio的区别

    bio:

    1. 面向流的。
    2. 单向的。
    3. 阻塞的,这也是b这个的由来。

    nio:

    1. 面向块的。(buffer)
    2. 双向的。
    3. 非阻塞的。同步的编程方式。是一种select模型

    nio编程的常规步骤

    从channel中获取的任何数据,都必须经过buffer来存放。

    1. 获取到channel。这里如果是从流中获取的channel,那么channel,也只支持单向。
    2. 构建Buffer
    3. 数据塞到Buffer中,如果是写回操作,执行flip
    4. 写回或读取

    Buffer 的使用

      buffer中的3个核心变量,和一个不常用的变量(mark):

    1. mark 设置标记,记下position的位置 ,用reset方法,可以返回这
    2. posotion 读写的位置,下一个要读和写的位置。
    3. limit 可读或可写的最大值,下一个不可读或不可写的元素下标。
    4. capacity buffer的最大值,创建之后就不会变。

     、

    直接内存映射,零拷贝:

    常规的java流操作过程:

    1. 将数据从jvm中,拷贝到堆外内存,jvm中,仅保存地址。
    2. 修改堆外的数据块,写入,读取。
    3. 将堆外内存,变化的,再拷回jvm的内存中。

     buffer有一个直接内存映射的buffer,叫DirectByteBuffer,通过DirectByteBuffer可以将数据库块直接放在jvm堆外的内存中,使得操作数据时,不需要将内存数据,从jvm中拷贝到堆外内存中。

     可以通过调用buffer的map方法,获得一个内存中的buffer。直接操作buffer,相当于操作原文件。

  • 相关阅读:
    AmazonS3 替换HDFS 方案
    SQL Server 内存管理
    SQL Server I/O 问题的诊断分析
    共享内存 设计原理-shm
    机器学习经典算法笔记-Support Vector Machine SVM
    ACGAN 论文笔记
    CGAN 论文笔记
    《Image Generation with PixelCNN Decoders》论文笔记
    《Iterative-GAN》的算法伪代码整理
    《Deep Learning Face Attributes in the Wild》论文笔记
  • 原文地址:https://www.cnblogs.com/amibandoufu/p/11441528.html
Copyright © 2011-2022 走看看