BIO、NIO、多路复用

BIO与NIO

文章目录


引入

当用户向服务器发起请求时,应用服务器会为每一个用户请求分配一个线程,如果http请求不做任何事情或者做的事情很慢,势必会造成应用服务器不必要的线程开销。比如说有人在银行窗口办理业务,想要给自己申请一张银行卡,填写申请表格挺耗费时间,但是银行柜员不可以腾出身子为其他用户服务。银行柜员只能在等待当前客户填好表格办理好业务,才可以叫号下一位客户。应用服务器上面的线程也是这样的情况,不管当前http请求有多慢,线程也无法抽身去做其他事情,这就是BIO模式。如果我们允许线程去做其他事情,那这就是NIO模式。

tomcat默认使用的是BIO模式,但是在9.0之后采用的是NIO模式。9.0之前的tomcat可以采用jetty替换,jetty则是典型的NIO模式,而且他是模块化的架构,可以把不需要的功能简化掉,从而提升jetty性能。

面试点
什么事BIO?什么事NIO?两者区别?
BIO每当接受用户请求时,都会占用一个线程完成此次请求,不管这次请求有多么耗时,始终等待此线程完成,不可以去做其他事情,当请求过多的时候,造成服务器大量的线程开销;
NIO则允许在线程阻塞时去做其他事情,提高线程的利用率;
tomcat默认使用的是BIO模式,但是在9.0之后采用的是NIO模式。9.0之前的tomcat可以采用jetty替换,jetty则是典型的NIO模式,而且他是模块化的架构,可以把不需要的功能简化掉,从而提升jetty性能。

相关推荐
身如柳絮随风扬3 天前
深入理解Java IO与NIO的区别:从BIO到NIO的演进
java·nio
白晨并不是很能熬夜4 天前
【PRC】第 2 篇:Netty 通信层 — NIO 模型 + 自定义协议 + 心跳
java·开发语言·后端·面试·rpc·php·nio
笨手笨脚の4 天前
详解五种IO模型
nio·bio·aio·io模型
JackSparrow4147 天前
彻底理解Java NIO(一)C语言实现 单进程+多进程+多线程 阻塞式I/O 服务器详解
java·linux·c语言·网络·后端·tcp/ip·nio
杨凯凡9 天前
【019】IO/NIO 概念:Web 开发要掌握到什么程度
java·开发语言·nio
佛祖让我来巡山11 天前
Netty入门|从BIO到Netty:一步步看懂Java网络编程的迭代逻辑
netty·nio·bio
devilnumber13 天前
java的NIO框架Netty、Mina、Grizzly 和 Jetty 四种对比
java·nio·java面试·jetty
四斤年华14 天前
关于SpringBoot在MultipartFile上java.nio.file.NoSuchFileException: /tmp/undertow
java·spring boot·nio
大G的笔记本15 天前
BIO(Blocking I/O) 和 NIO(Non‑Blocking I/O) 两种不同的 I/O 模型
java·nio
野生技术架构师17 天前
Java NIO到底是个什么东西?
java·开发语言·nio