zoukankan      html  css  js  c++  java
  • 知识联结梳理 : 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等。

  • 相关阅读:
    dockerfile 详解
    kubectl简介
    关于高级事件的使用
    关于拖拽延伸出来的一些效果
    照片墙的制作过程及其出现的问题
    关于360度全景照片的问题总结
    实战演练-记账本App (五)
    人月神话阅读笔记02
    实战演练-记账本App(四)
    实战演练-记账本App(三)
  • 原文地址:https://www.cnblogs.com/liushijie/p/5449798.html
Copyright © 2011-2022 走看看