博客
关于我
Netty源码—2.Reactor线程模型二
阅读量:789 次
发布时间: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工作笔记0041---Netty入门--服务端2
    查看>>
    Netty工作笔记0042---Netty入门--编写客户端
    查看>>
    Netty工作笔记0043---单Reactor多线程模式
    查看>>
    Netty工作笔记0044---Netty案例源码分析
    查看>>
    Netty工作笔记0044---scheduledTaskQueue
    查看>>
    Netty工作笔记0045---Netty模型梳理
    查看>>
    Netty工作笔记0045---异步模型原理剖析
    查看>>
    Netty工作笔记0046---TaskQueue自定义任务
    查看>>
    Netty工作笔记0046---异步模型原理剖析
    查看>>
    Netty工作笔记0047---Http服务程序实例
    查看>>
    Netty工作笔记0048---Http服务过滤资源
    查看>>
    Netty工作笔记0049---阶段内容梳理
    查看>>
    Netty工作笔记0050---Netty核心模块1
    查看>>
    Netty工作笔记0051---Netty核心模块2
    查看>>
    Netty工作笔记0052---Pipeline组件剖析
    查看>>
    Netty工作笔记0053---Netty核心模块梳理
    查看>>
    Netty工作笔记0054---EventLoop组件
    查看>>
    Netty工作笔记0055---Unpooled应用实例1
    查看>>
    Netty工作笔记0056---Unpooled应用实例2
    查看>>
    Netty工作笔记0057---Netty群聊系统服务端
    查看>>