目前工作中,感觉一致都只是用 bio 读一些本地文件,都没用过 nio 和 aio ,最近在背八股,实在忍不住想知道,nio 和 aio 的使用场景是什么?跟我用一个 inputstream 读本地文件有啥区别?
八股里都说 nio 和 aio 都说是适合并发较高的,不是很理解。既然这两个这么好,那为啥不用这两个?
1
kwh 2023-03-10 21:46:34 +08:00
响应式编程就是 nio 啊。
webflux,quarkus 。 因为响应式编程比阻塞编程难吧。 协程也是 nio 吧。 |
2
tairan2006 2023-03-11 10:26:49 +08:00 via Android
NIO 参考 Linux epoll ,AIO 参考 windows 的 IOCP.
你光在 jvm 里面看没啥意义… |
3
chenPiMeiHaoChi 2023-03-11 10:53:48 +08:00
spring 的 webflux 就是 nio ,写起来比 mvc 麻烦,可维护性也不如 mvc ,BUG 也不好查。
|
4
cheng6563 2023-03-11 13:33:49 +08:00
首先,Java 现在底层都是 NIO
NIO: 连接建立后由一个全局线程一直询问连接收到数据没,这个询问操作不会阻塞。 BIO:每次询问都来一点点数据,问 10 次都问不出一个完整的 HTTP 请求,代码太难写了,我还是再建一个线程不停地循环读取这个连接的数据吧。 AIO:专门写个 HTTP 解析器缓冲处理 NIO 收到的数据,等拼出一个完整的 HTTP 请求后就异步调用你的业务代码。 |