V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
t202201
V2EX  ›  Java

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

  •  
  •   t202201 · 2023-03-10 21:22:38 +08:00 · 1756 次点击
    这是一个创建于 654 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

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

    NIO: 连接建立后由一个全局线程一直询问连接收到数据没,这个询问操作不会阻塞。
    BIO:每次询问都来一点点数据,问 10 次都问不出一个完整的 HTTP 请求,代码太难写了,我还是再建一个线程不停地循环读取这个连接的数据吧。
    AIO:专门写个 HTTP 解析器缓冲处理 NIO 收到的数据,等拼出一个完整的 HTTP 请求后就异步调用你的业务代码。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2471 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 34ms · UTC 15:50 · PVG 23:50 · LAX 07:50 · JFK 10:50
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.