什么是经典的三种I/O模式?
场景 | 模式 | jdk支持 |
---|---|---|
排队打饭 | BIO(阻塞I/O) | jdk1.4之前 |
点单、等待被叫模式 | NIO(非阻塞I/O) | JDK1.4 |
包厢 | AIO(非阻塞异步I/O) | JDK1.7 |
Netty对三种I/O模式的支持?
曾经对于三种IO都曾做过支持
为什么Netty仅支持NIO了?
1、不建议使用阻塞I/O(BIO/OIO),因为在连接数高的情况下,阻塞意味着占用一个线程,比较耗资源,效率非常低。
2、对于不同平台支持的成熟度不同,windows实现成熟,但是很少用来做服务器。linux常用来做服务器,但是AIO不够成熟,并且Linux下AIO相比较NIO的性能提升不明显。
为什么Netty有多种NIO实现 ?
通用的NIO实现在Linux下也是使用epoll,为什么Netty还要单独实现?
1、因为Netty实现得更好,Netty暴露了更多的可控参数,例如:
- JDK的NIO默认实现是水平触发
- Netty是边缘触发和水平触发可切换
ps:单独解释边缘触发啊和水平触发
2、Netty实现的垃圾回收更少、性能更好
NIO一定优于BIO吗?
1、BIO代码简单
2、特定场景:连接数少、并发度低、BIO性能不输NIO
源码解读Netty怎么切换I/O模式?
怎么切换?
原理是什么?
为什么服务器开发并不需要切换客户端对应的socket?