知识联结梳理 : I/O多路复用、EPOLL(SELECT/POLL)、NIO、Event-driven、Reactor模式

为了形成一个完整清晰的认识,将概念和关系梳理出来,把坑填平。

I/O多路复用
I/O多路复用主要解决传统I/O单线程阻塞的问题。它通过单线程管理多个FD,当监听的FD有状态变化的时候的,调用回调函数,通知用户已经准备完毕。用户收到通知,就可以进行IO操作了。这种机制大大的提高了系统的吞吐量。I/O多路复用的目的是为了更充分的利用CPU资源。

EPOLL(SELECT/POLL)
Linux下I/O多路复用的接口实现。EPOLL是POLL和SELECT的升级版。NIO底层就是封装了EPOLL接口。

Event-driven
也叫事件驱动。是通过执行某一操作的时候,触发之前就已经注册好的监听器。比如:AWT中的按钮点击事件机制,还有下面要说的Reactor模式就是基于事件驱动的设计。基于事件驱动的应用有:Nginx、Redis、Memcached等,都是大名鼎鼎的开源项目。同时,个人认为事件驱动机制也是依赖与EPOLL机制,基于没有依据,需要看官多多思考,更欢迎指教。

Reactor模式
也叫反应堆模式,基于事件驱动的设计模式。网上有大把的文章和教程比较看,笔者强烈推荐看《Scalable IO in Java》论文。看完就啥都懂了。

NIO && Netty
Reactor模式在Java上的API实现。是Java高性能高并发访问的重要组成部分。但是因为在NIO编程中需要处理的琐碎细节比较多,个人在coding的时候发现的是异常情况处理有点多。《Netty权威指南》说了为什么不选择原生NIO编程的原因(虽然同行们对此书评价不高,但至少这个原因说的还算正确):
可靠性能力补齐,工作量和难度都非常大。例如客户端面临断连重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等等,NIO编程的特点是功能开发相对容易,但是可靠性能力补齐工作量和难度都非常大;
Netty封装了NIO,给人们提供了一个更方便可靠的选择。在很多著名的开源工具上都有使用Netty作为NIO功能的替代,比如阿里的dubbo、新浪刚开源的motan等。

转载于:https://www.cnblogs.com/liushijie/p/5449798.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值