IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 网络协议 -> Netty -> 正文阅读

[网络协议]Netty

Netty

Netty是一个异步的,基于事件驱动的NIO网络应用框架。主要针对在TCP协议下,面向Client端的高并发应用,或者Peer-to-Peer场景下的大数据持续传输的应用。

Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients.

GitHub:https://github.com/netty/netty

20210731004327662304

线程模型

  1. 传统阻塞I/O服务模型

    特点:采用阻塞I/O模式获取输入的数据,每个连接都需要独立的线程完成数据的输入、业务处理、数据返回。

    瓶颈:当并发数很大时,会创建大量的线程,导致CPU上下文频繁切换,占用系统资源。连接创建后,如果当前线程暂时没有数据可读时,该线程会阻塞在Read操作上,造成线程资源浪费。

    传统阻塞I/O服务模型

  2. Reactor模型

    根据Reactor的数量和处理资源池线程数量的不同,有3种典型的实现。

    基于I/O复用模型:多个连接公用一个阻塞对象,应用程序只需要在一个阻塞对象等待,无需阻塞等待所有连接。当某个连接有新的数据可以处理时,操作系统通知应用程序,线程从阻塞态返回。

    基于线程池复用线程资源:不必再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。

    iShot2022-03-14 19.41.40

    • 单Reactor单线程

      单Reactor单线程

    • 单Reactor多线程

      单Reactor多线程

    • 主从Reactor多线程

      主从Reactor多线程

  3. Netty线程模型(基于主从Reactor多线程模型,其中主从Reactor多线程模型有多个Reactor)

    Netty抽象出两组线程池BoosGroup负责接收客户端的连接,WorkGroup负责网络的读写。

    BoosGroupWorkGroup类型都是NioEventLoopGroup,相当于一个事件循环组,组中含有多个事件循环,每个事件循环是NioEventGroup

    NioEventLoop表示一个不断循环的执行处理任务的线程,每个NioEventLoop都有一个Selector,用于监听绑定在其上的Socket的网络通信。

    NioEventLoopGroup可以有多个线程,即可以含有多个NioEventLoop

    • 每个Boos NioEventLoop执行
      1. 轮训accept事件
      2. 处理accept事件,与clinet建立连接,生成NioSocketChannel,并将其注册到某个Worker NioEventLoop上的selector
      3. 处理任务队列,即runAllTasks
    • 每个Worker NioEventLoop执行
      1. 轮询read/write事件,即在对应的NoiSocketChannel处理I/O事件
      2. 处理任务队列,即runAllTasks

    每个Worker NioEventLoop处理业务是,会使用PipeLine,其中维护了多种处理器

    Netty线程模型

  网络协议 最新文章
使用Easyswoole 搭建简单的Websoket服务
常见的数据通信方式有哪些?
Openssl 1024bit RSA算法---公私钥获取和处
HTTPS协议的密钥交换流程
《小白WEB安全入门》03. 漏洞篇
HttpRunner4.x 安装与使用
2021-07-04
手写RPC学习笔记
K8S高可用版本部署
mySQL计算IP地址范围
上一篇文章      下一篇文章      查看所有文章
加:2022-03-17 22:35:21  更:2022-03-17 22:37:28 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/26 5:44:17-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码