zoukankan      html  css  js  c++  java
  • [日常摘要] -- 阻塞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没有
        • 选择器用于使用单个线程处理多个通道。因此,它需要较少的线程来处理这些通道。因为线程之间的切换对于操作系统来说是很昂贵的,因此提高了效率选择器是有用的。
  • 相关阅读:
    Qt ini文件
    Qt我的文档 桌面路径
    windows zlib库编译步骤
    环形缓冲区
    openssl生成随机数
    怎样安装Scrapy
    CentOS7怎样安装GoAccess1.3
    Docker创建数据卷容器
    Docker创建数据卷
    Docker创建容器
  • 原文地址:https://www.cnblogs.com/lycsmzl/p/13213926.html
Copyright © 2011-2022 走看看