• [日常摘要] -- 阻塞IO与非阻塞IO篇


    NIO操作过程

    • 非阻塞读/写操作
      • 读-- 从通道读取数据到buffer,同时可以继续做别的事情,但数据都到buffer之后,线程再继续处理数据
      • 写-- 一个线程请求写入一些数据到某通道,但不需要等待它完全写入,这个线程可以同时去做别的事情
    • Buffer(缓冲区)
      • IO 面向流(Stream oriented),而NIO 面向缓冲区(Buffer oriented)
        • Buffer是一个对象,包含一些要写入或者要读出的数据。在NIO类库中假如Buffer对象,体现了新库与原I/O的一个重要区别。在面向流的I/O中,可以将数据直接写入或者将数据直接读到Stram对象中。虽然 Stream 中也有 Buffer 开头的扩展类,但只是流的包装类,还是从流读到缓冲区,而 NIO 却是直接读到 Buffer 中进行操作。
        • 最常用的缓冲区是ByteBuffer,一个ByteBuffer提供了一组功能用于操作byte数组。除了ByteBuffer,还有其他的一些缓冲区,事实上,每一种Java基本类型(除了Boolean类型)都对应有一种缓冲区。
    • Channal(通道)
      • NIO 通过Channel(通道) 进行读写
      • 通道是双向的,可读也可写,而流的读写是单向的
      • 通道只能和Buffer交互,因为Buffer,可以异步地读写
    • Selector (选择器)
      • NIO有选择器,而IO没有
        • 选择器用于使用单个线程处理多个通道。因此,它需要较少的线程来处理这些通道。因为线程之间的切换对于操作系统来说是很昂贵的,因此提高了效率选择器是有用的。
  • 相关阅读:
    Bash Shell 快捷键
    vector-swap
    vector-swap
    vector-size
    Android网络篇
    应用 Valgrind 发现 Linux 程序的内存问题
    树莓派初学者?先做做这十个项目吧
    树莓派 (为学习计算机编程教育设计的一种微型电脑)
    微软windows10 IOT支持PI3之后,树莓派3更是将获得Android官方原生支持
    Linux基金会宣布JS Foundation基金会成立 前身为jQuery团队
  • 原文地址:https://www.cnblogs.com/lycsmzl/p/13213926.html
Copyright © 2020-2023  润新知