美文网首页
怎么理解NIO?

怎么理解NIO?

作者: MakeItSimple | 来源:发表于2019-03-22 10:09 被阅读0次

NIO,BIO,非阻塞,阻塞?到底怎么理解呢?

分析

  • 客户端
    对于客户端来说,无论如何都是阻塞的,客户端发送请求到服务端后,就会等待结果返回,此时两种处理方式。
    1)客户端线程阻塞住,等待返回
    2)客户端引入异步措施(相对同步而言,使用类似Future的功能实现),但这个不能说客户端不是阻塞的。(阻塞和非阻塞,异步和同步是不同纬度的概念)


    image.png
  • 服务端
    对于服务端来说,如果是BIO,那么接到客户端请求后,立刻启动一个线程来处理这个请求。在处理过程中,这个线程是阻塞的,它必须等待网络IO传输完毕,才能做下面的事情。在这个等待过程中,这个线程是不能做其他事情的。
    注意,这里的线程模型是一个客户端请求来了后,就有一个服务端线程伺候着。显然不符合高并发的场景。
    而对于NIO,处理请求的线程在不停的监听客户端的请求,一旦有了新请求过来,就把这个请求纳入到监听列表中去,并不停地监听这个列表,看这个列表中是否有数据传输完毕的请求,如果有,则立刻处理(这个监听可以分发到任意多的线程中)。
    注意,此时的线程模型跟BIO是截然不同的。客户端的多个请求,被映射到了服务端的一个线程中去。这个线程的使用效率明显得到了提高,很适合高并发的使用场景。


    image.png

结论

从这个意义上来说,所谓NIO,非阻塞,主要还是针对服务端中的处理线程来说的。

相关文章

  • 怎么理解NIO?

    NIO,BIO,非阻塞,阻塞?到底怎么理解呢? 分析 客户端对于客户端来说,无论如何都是阻塞的,客户端发送请求到服...

  • 网络/IO基础

    一、BIO、NIO、AIO的概念 BIO,NIO,AIO的理解1BIO,NIO,AIO的理解2概念解释一个IO操作...

  • NIO 理解

    NIO 基于通道(Channel)与缓冲区(buffer)的I/O方式,它可以使用Natvie函数库直接分配对外内...

  • NETTY框架核心模块概述

    netty是一个NIO通信框架,但是要用好netty,需要深入理解JAVA IO, NIO以及netty NIO框...

  • 一文详解 | Java 中 NIO基础详解

    Netty 是基于Java NIO 封装的网络通讯框架,只有充分理解了 Java NIO 才能理解好Netty的底...

  • netty系列之(一)——netty介绍

    IO模型 一、NIO原理 Netty 是基于Java NIO 封装的网络通讯框架,只有充分理解了 Java NIO...

  • 自顶向下深入分析Netty(一)--预备知识

    Netty是基于Java NIO封装的网络通讯框架,只有充分理解了Java NIO才能理解好Netty的底层设计。...

  • netty极简教程(二): nio Buffer的原理及使用

    我们知道,netty直接与jdk的原生nio开发的,可以说是jdk nio的增强,所以理解jdk nio的机制就变...

  • 简单理解NIO

    1.为什么要使用NIO 由于IO是基于阻塞IO模式的,读写操作都有可能会阻塞。如果用单线程处理IO,就会导致在线程...

  • NIO原理

    为什么我执意要先把NIO基础原理放到最开始来讲,主要是因为,只有理解好了原理,才能更好的去理解NIO。 一、用户空...

网友评论

      本文标题:怎么理解NIO?

      本文链接:https://www.haomeiwen.com/subject/rknkvqtx.html