• Netty系列教程 Netty组件之EventLoopGroup


    前言

    线程模型是Netty框架的核心,模型设计的好坏决定了框架的性能、并发量和安全性等架构质量。

    Netty的线程模型被精心的设计,既提升了框架的并发性能,又在很大程度避免锁,局部实现了无锁化设计。

    因此这篇文章将介绍Netty的线程模型,看看它的线程模型是如何设计用于支持高并发高性能的。

    三种Reactor线程模型

    提到线程模型,比较经典的是Reactor线程模型,尽管不同的NIO框架对Reactor模型的实现有所差异,但是本质上还是遵循了Reactor的基础线程模型。

    什么是Reactor线程模型?

    Reactor线程模型是对于传统的I/O线程模型的一种优化。

    传统的I/O线程模型采用阻塞I/O来获取输入流数据,并且每个连接都需要独立的线程完成数据的输入、业务处理、数据返回等一个完整的操作链路。这种模型在高并发场景下,有两个比较明显的缺点:

    • 每个连接都需要创建一个对应线程,线程大量创建占用大量的服务器资源

    • 线程没有数据可读情况下的阻塞会对性能造成很大的影响

    Reactor线程模型为了解决这两个问题,提供了以下解决方案:

    • 基于I/O多路复用:多个客户端连接共用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,通过事件驱动通知应用程序,线程从阻塞状态返回,开始进行业务处理

    • 基于线程池技术减少线程创建:基于线程池,不必再为每一个连接创建线程,将连接完成后的业务处理分配给线程池进行调度

    Reactor线程模型图:

    Reactor线程模型

    Reactor在一个单独的线程中进行,负责监听和分发事件。

    Reactor的两个核心组件:

    • EventDispatch:监听和分发事件,分发给适当的处理程序来对IO事件做出反应

    • handlers是处理程序执行IO事件要完成的实际事件,Reactor 通过调度适当地处理程序来响应I/O事件,处理程序执行非阻塞操作。

    Reactor模式使用I/O复用监听事件,收到事件后,分发给某个线程去处理,这也是能

  • 相关阅读:
    Nginx负载均衡机制及常见问题
    DPDK Ring
    【app篇】可拖拽BLE遥控app简单版本
    零代码使用air32做USB转串口
    主频计算-架构真题(二十三)
    《痞子衡嵌入式半月刊》 第 51 期
    调教 文心一言 生成 AI绘画 提示词(Midjourney)
    python基于PHP+MySQL的学生宿舍管理系统
    IDEA (任意 JetBrains IDE)拆分先前 commit
    基于树莓派的智能门禁及3D外壳打印设计
  • 原文地址:https://blog.csdn.net/AS011x/article/details/126814439