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

2023-03-10 21:22:38 +08:00
 t202201

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

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

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

NIO: 连接建立后由一个全局线程一直询问连接收到数据没,这个询问操作不会阻塞。
BIO:每次询问都来一点点数据,问 10 次都问不出一个完整的 HTTP 请求,代码太难写了,我还是再建一个线程不停地循环读取这个连接的数据吧。
AIO:专门写个 HTTP 解析器缓冲处理 NIO 收到的数据,等拼出一个完整的 HTTP 请求后就异步调用你的业务代码。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/923012

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX