zoukankan      html  css  js  c++  java
  • NIO高并发基础

    NIO高并发

    是jdk1.4出现的新的流.
    NIO - New IO - 同步式非阻塞式IO
    BIO - Blocking IO - 同步式阻塞式IO ---UDP/TCP
    AIO - AsynchronousIO - 异步式非阻塞IO - jdk1.8

    BIO的缺点

    1.会产生阻塞行为 --- receive/accept/connect/read/write
    2.一对一的连接:每连接一个客户端,在服务器端就要开启一个线程去处理请求.在客户端较多的情况下,服务器端就会产生大量的线程 - 耗费内存
    3.建立连接之后如果不发生任何操作,那么就会导致服务器中的这个线程依然被占用,耗费服务器资源
    4.无法实现定点操作

    NIO組件

    三个基本组件

    -Buffer 缓冲区
    -Channel 通道
    -Selector 多路复用选择器

    Buffer-缓冲区

    容器 - 存储数据 - 在底层存储数据的时候实际上是以数组形式来存储的
    capacity - 容量位 - 指定缓冲区的容量
    limit - 限制位 - 限制操作位所能达到的尺度
    position - 操作位 - 指定要操作的位置
    mark - 标记位 - 标记位置,认为标记位置之前的数据是已经操作过的没有错误的数据
    mark<=position<=limit<=capacity
    flip - 反转缓冲区:先将限制位挪到操作位上,然后将操作位归0,清空标记位
    clear - 清空缓冲区:将操作位归零,将limit挪到capacity,将标记位清空
    reset - 重置缓冲区:将操作位挪到标记位
    rewind - 重绕缓冲区:将操作位归零,将标记位清空 --- 缓冲区多次读取

    Channel - 通道

    传输数据,是面向缓冲区的.在java中,Channel默认也是阻塞的,需要手动将其设置为非阻塞模式
    NIO:FileChannel UDP-DatagramChannel TCP-SocketChannel ServerSocketChannel
    -FileChannel:操作文件,可以利用通道实现相同平台之间的零拷贝技术

    Select - 多路复用选择器

    进行选择 - 是面向通道进行操作.要求通道在使用的时候必须设置为非阻塞
    -客户端:可连接 可读 可写
    -服务端:可接受 可读 可写
    通过Selector可以实现利用同一个服务器来处理多个客户端的数据---可以用少量的线程处理大量的请求 -- 在底层处理的时候实际上依然是同步的

    NIO的优势

    1.非阻塞:提高传输效率
    2.一对多的连接:可以用一个或者少量的服务器中的线程来处理大量的请求,从而节省服务器的资源
    3.即使已经建立连接,只要没有对应的读写事件,那么依然不能够使用服务器来处理
    4.利用通道实现数据的双向传输
    5.因为利用缓冲区来存储数据,所以可以对缓冲区中的数据实现定点操作

  • 相关阅读:
    visual C sharp express from 360 free download
    Druid 在小米公司部分技术实践-博客-云栖社区-阿里云
    公司业务-猫眼知健康
    Sculptor
    可译网 —— 翻译可以更简单
    牛客网-专业IT笔试面试备考平台,最全C++JAVA前端求职题库,全面提升IT编程能力
    设置Redis的LRU策略
    springboot中使用aop技术
    elasticSearch的部署和使用
    jvm原理和代码运行的过程
  • 原文地址:https://www.cnblogs.com/nanlinghan/p/10130978.html
Copyright © 2011-2022 走看看