t202201
V2EX  ›  Java

bio, nio, aio 的区别到底是什么,能不能说一下具体的使用场景

  •  
  •   t202201 · Mar 10, 2023 · 2409 views
    This topic created in 1186 days ago, the information mentioned may be changed or developed.

    目前工作中,感觉一致都只是用 bio 读一些本地文件,都没用过 nio 和 aio ,最近在背八股,实在忍不住想知道,nio 和 aio 的使用场景是什么?跟我用一个 inputstream 读本地文件有啥区别?

    八股里都说 nio 和 aio 都说是适合并发较高的,不是很理解。既然这两个这么好,那为啥不用这两个?

    4 replies    2023-03-11 13:33:49 +08:00
    kwh
        1
    kwh  
       Mar 10, 2023
    响应式编程就是 nio 啊。
    webflux,quarkus 。
    因为响应式编程比阻塞编程难吧。
    协程也是 nio 吧。
    tairan2006
        2
    tairan2006  
       Mar 11, 2023 via Android
    NIO 参考 Linux epoll ,AIO 参考 windows 的 IOCP.
    你光在 jvm 里面看没啥意义…
    chenPiMeiHaoChi
        3
    chenPiMeiHaoChi  
       Mar 11, 2023
    spring 的 webflux 就是 nio ,写起来比 mvc 麻烦,可维护性也不如 mvc ,BUG 也不好查。
    cheng6563
        4
    cheng6563  
       Mar 11, 2023
    首先,Java 现在底层都是 NIO

    NIO: 连接建立后由一个全局线程一直询问连接收到数据没,这个询问操作不会阻塞。
    BIO:每次询问都来一点点数据,问 10 次都问不出一个完整的 HTTP 请求,代码太难写了,我还是再建一个线程不停地循环读取这个连接的数据吧。
    AIO:专门写个 HTTP 解析器缓冲处理 NIO 收到的数据,等拼出一个完整的 HTTP 请求后就异步调用你的业务代码。
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   2908 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 33ms · UTC 15:03 · PVG 23:03 · LAX 08:03 · JFK 11:03
    ♥ Do have faith in what you're doing.