Netty怎么切换三种I/O模式?

一、相关问题

相关问题
1什么是经典的三种I/O模式
2Netty对三种I/O模式的支持
3为什么Netty仅支持NIO了?
4为什么Netty有多种NIO实现?
5NIO一定优于BIO么?

二、问题1:什么是经典的三种I/O模式

类比:

  • 饭店->服务器
  • 饭菜->数据
  • 饭菜好了->数据就绪
  • 端菜/送菜->数据读取
排队打饭模式BIO(阻塞I/O)JDK1.4之前
点单、等待被叫模式NIO(非阻塞I/O)JDK1.4(2022年,java.nio包)
包厢模式AIO(异步I/O)JDK1.7(2011)
  •  阻塞与非阻塞
    • 菜没好,要不就死等->数据就绪前要不要等待?
    • 阻塞:没有数据传输过来时,读会阻塞直到有数据;缓存区满时,写操作也会阻塞。非阻塞遇到这些情况,都是直接返回。
  • 同步与异步
    • 菜好了,谁端->数据就绪后,数据操作谁完成?
    • 数据就绪后需要自己去读是同步,数据就绪后直接读好在回调是异步。

 三、问题2:Netty对三种I/O模式的支持

 

四、问题3:为什么Netty仅支持NIO了?

  •        为什么不建议(deprecate)阻塞I/O(BIO/OIO)?

                连接数高的情况下:阻塞->耗资源、效率低

  • 为什么删除已经做好的AIO支持?
    • Windows实现成熟,但是很少用来做服务器。
    • Linux常用来做服务器,但是AIO实现不够成熟
    • Linux下AIO相比较NIO的性能提升不明显。

 五、问题4:为什么Netty仅支持NIO了?

        通用的NIO实现(Common)在Linux下使用的是epoll,为什么单独实现?实现的更好?

  • Netty暴露了更多的可控参数,例如:
    • jdk的NIO默认是水平触发
    • Netty是边缘触发(默认)和水平触发可切换
  • Netty实现的垃圾回收更少,性能更好。

 六、问题5:NIO一定优于BIO么?

  • BIO代码简单

  • 特定场景:连接数少,并发度低,BIO性能不输BIO 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值