Netty 核心组件

  1. Channel - Socket
  2. Future - 异步通知
  3. EventLoop - 控制流,多线程处理,并发
  • Netty的传输
    1. NIO
    2. Epoll
    3. OIO
    4. Local
    5. Embedded
  • Channel - Socket

    OS原语:bind() connect() read() write()

    Java原语:class Socket

    • Netty的Channel是线程安全的,多线程使用它写数据时,将顺序发送消息

    Future - 异步通知

    • JDK的Future需要手动检查或者阻塞到完成,Netty提供了异步回调功能的ChannelFuture
    • 每个Netty的出站IO操作都将返回一个ChannelFuture;也就是说,它们都不会阻塞,完全异步事件驱动

    EventLoop - 控制流,多线程处理,并发

    多reactor模型:EventLoopGroup -> 提供EventLoop -> 绑定Channel:

    EventLoop本身只由一个线程驱动,其处理了一个Channel的所有IO事件,并且在其整个生命周期内都不会改变
    
    一个给定Channel的IO操作都是由相同的Thread执行,消除了同步的需求

    Netty的传输

    NIO

    使用JDK的NIO,基于选择器的方式

    选择器背后的基本概念是充当一个注册表,在那里可以请求在channel的状态发生变化时得到通知。

    选择器运行在一个检查状态变化并对其做出响应的线程上,在应用程序对状态的改变做出响应后,选择器将会被重置,并重复。

    Epoll

    由JNI驱动的epoll和非阻塞IO,比NIO更快,完全非阻塞

    OIO

    使用阻塞流,可以兼容JDBC等阻塞调用

    Local

    在VM内部使用管道进行本地通信

    Embedded

    测试,不需要真正的网络传输


    转载请注明来源,欢迎对文章中的引用来源进行考证,欢迎指出任何有错误或不够清晰的表达。可以在下面评论区评论,也可以邮件至 wshten@gmail.com

    文章标题:Netty 核心组件

    本文作者:KevinTen

    发布时间:2019-11-11, 00:00:00

    最后更新:2019-11-11, 20:48:42

    原始链接:http://github.com/kevinten10/2019/11/11/Netty/Netty-核心组件/

    版权声明: "署名-非商用-相同方式共享 4.0" 转载请保留原文链接及作者。

    目录
    ×

    喜欢就点赞,疼爱就打赏

    csdn zhihu github