博客
关于我
Netty源码—2.Reactor线程模型二
阅读量:792 次
发布时间:2023-02-15

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

NioEventLoop 启动流程详解

1. 关于 NioEventLoop 的问题整理

NioEventLoop 是 Netty 项目中用于处理 I/O 事件的核心线程模型。它基于 Reactor 线程模型,专注于非阻塞 I/O 操作,能够高效处理大量连接。

2. Reactor 线程模型的主要分三部分

Reactor 线程模型主要包括以下三个部分:

  • 单线程模型:所有任务都在一个线程上执行。
  • 多线程模型:使用多个线程来处理任务,线程选择器负责任务分配。
  • 混合模型:结合单线程和多线程模型,灵活处理任务。

3. NioEventLoop 的创建

NioEventLoop 的创建过程如下:

  • 调用 ServerBootstrap.bind() 方法。
  • 执行 doBind() 方法,创建服务端 Channel。
  • 初始化并注册服务端 Channel 到 Selector。
  • 4. NioEventLoop 启动

    4.1 启动 NioEventLoop 的两大入口

    入口一:服务端启动

    当服务端启动时,ServerBootstrap.bind() 方法会触发以下流程:

    • 调用 AbstractBootstrap.doBind() 方法。
    • 初始化并注册服务端 Channel 到 Selector。

    入口二:新连接接入

    当新连接接入时,通过 Chooser 绑定一个 NioEventLoop。

    4.2 判断当前线程是否是 NioEventLoop 线程

    调用 NioEventLoop.inEventLoop() 方法判断当前线程是否为 Reactor 线程。NioEventLoop 会将线程实体保存到自身的成员变量中。

    4.3 创建一个线程并启动

    如果当前线程不是 NioEventLoop 线程,会执行以下步骤:

  • 调用 SingleThreadEventExecutor.startThread() 方法启动线程。
  • 使用 ThreadPerTaskExecutor 创建一个 FastThreadLocalThread 线程。
  • 线程执行 Runnable 任务,将线程实体保存到 NioEventLoop 中。
  • 调用 NioEventLoop 的 run() 方法启动线程。
  • 4.4 启动总结

    NioEventLoop 启动流程:

  • 服务端启动时,主线程调用 AbstractUnsafe.register() 方法。
  • 将 NioEventLoop 绑定到服务端 Channel。
  • 执行 Runnable 任务,启动 NioEventLoop 线程。
  • NioEventLoop 的 run() 方法驱动 Netty 运转的核心逻辑。
  • 通过以上流程,NioEventLoop 能够高效管理和处理 I/O 事件,确保服务端 Channel 正确注册到 Selector 上。

    转载地址:http://fvcfk.baihongyu.com/

    你可能感兴趣的文章
    Netty工作笔记0083---通过自定义协议解决粘包拆包问题1
    查看>>
    Netty工作笔记0084---通过自定义协议解决粘包拆包问题2
    查看>>
    Netty工作笔记0085---TCP粘包拆包内容梳理
    查看>>
    Netty常用组件一
    查看>>
    Netty常见组件二
    查看>>
    Netty应用实例
    查看>>
    netty底层——nio知识点 ByteBuffer+Channel+Selector
    查看>>
    netty底层源码探究:启动流程;EventLoop中的selector、线程、任务队列;监听处理accept、read事件流程;
    查看>>
    Netty心跳检测
    查看>>
    Netty心跳检测机制
    查看>>
    netty既做服务端又做客户端_网易新闻客户端广告怎么做
    查看>>
    netty时间轮
    查看>>
    Netty服务端option配置SO_REUSEADDR
    查看>>
    Netty核心模块组件
    查看>>
    Netty框架内的宝藏:ByteBuf
    查看>>
    Netty框架的服务端开发中创建EventLoopGroup对象时线程数量源码解析
    查看>>
    Netty源码—1.服务端启动流程一
    查看>>
    Netty源码—1.服务端启动流程二
    查看>>
    Netty源码—2.Reactor线程模型一
    查看>>
    Netty源码—2.Reactor线程模型二
    查看>>