博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
知识联结梳理 : I/O多路复用、EPOLL(SELECT/POLL)、NIO、Event-driven、Reactor模式
阅读量:5220 次
发布时间:2019-06-14

本文共 926 字,大约阅读时间需要 3 分钟。

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

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

你可能感兴趣的文章
windows server 2008 R2 怎么集成USB3.0驱动
查看>>
Foxmail:导入联系人
查看>>
vue:axios二次封装,接口统一存放
查看>>
vue中router与route的区别
查看>>
js 时间对象方法
查看>>
网络请求返回HTTP状态码(404,400,500)
查看>>
Spring的JdbcTemplate、NamedParameterJdbcTemplate、SimpleJdbcTemplate
查看>>
Mac下使用crontab来实现定时任务
查看>>
303. Range Sum Query - Immutable
查看>>
图片加载失败显示默认图片占位符
查看>>
【★】浅谈计算机与随机数
查看>>
《代码阅读方法与实现》阅读笔记一
查看>>
解决 sublime text3 运行python文件无法input的问题
查看>>
javascript面相对象编程,封装与继承
查看>>
Atlas命名空间Sys.Data下控件介绍——DataColumn,DataRow和DataTable
查看>>
Java中正则表达式的使用
查看>>
算法之搜索篇
查看>>
新的开始
查看>>
java Facade模式
查看>>
NYOJ 120校园网络(有向图的强连通分量)(Kosaraju算法)
查看>>