Netty线程模型

Netty线程模型

Netty中两个线程池, 分别是BossGroup和WorkGroup, 线程模型如下图所示:
在这里插入图片描述

模型解释:

  1. Netty 抽象出两组线程池BossGroup和WorkerGroup,BossGroup专门负责接收客户端的连接, WorkerGroup专门负责网络的读写
  2. BossGroup和WorkerGroup类型都是NioEventLoopGroup
  3. NioEventLoopGroup 相当于一个事件循环线程组, 这个组中含有多个事件循环线程 , 每一个事件循环线程是NioEventLoop
  4. 每个NioEventLoop都有一个selector , 用于监听注册在其上的socketChannel的网络通讯
  5. 每个Boss NioEventLoop线程内部循环执行的步骤有 3 步
  • 处理accept事件 , 与client 建立连接 , 生成 NioSocketChannel
  • 将NioSocketChannel注册到某个worker NIOEventLoop上的selector
  • 处理任务队列的任务 , 即runAllTasks
  1. 每个worker NIOEventLoop线程循环执行的步骤
  • 轮询注册到自己selector上的所有NioSocketChannel 的read, write事件
  • 处理 I/O 事件, 即read , write 事件, 在对应NioSocketChannel 处理业务
  • runAllTasks处理任务队列TaskQueue的任务 ,一些耗时的业务处理一般可以放入TaskQueue中慢慢处理,这样不影响数据在 pipeline 中的流动处理
  1. 每个worker NIOEventLoop处理NioSocketChannel业务时,会使用 pipeline (管道),管道中维护了很多 handler 处理器用来处理 channel 中的数据

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/224846.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

面试官:说说Loader和Plugin的区别

面试官:说说Loader和Plugin的区别?编写Loader,Plugin的思路? 一、区别 loader 是文件加载器,能够加载资源文件,并对这些文件进行一些处理,诸如编译、压缩等,最终一起打包到指定的文…

【Unity动画】Sprite 2D精灵创建编辑到动画

如何切图(sprite editor) 有时候一张图可能包含了很多张子图,就需要在Unity 临时处理一下,切开,比如动画序列帧图集 虽然我们可以在PS里面逐个切成一样的尺寸导出多张,再放回Unity,但是不需要这…

docker镜像与容器的基本操作,容器打包以及镜像迁移

docker镜像拉取---docker pull docker pull image_name[:tag] 这是直接拉取官方镜像 image_name: 镜像的名称,例如 ubuntu, nginx, mysql 等。tag: 镜像的标签,表示版本或者特定的标识。如果未指定标签,默认为 latest。 例如,…

Qt之QGraphicsView —— 笔记1.2:将QGraphicsView放置主窗口上,绘制简单图元(附完整源码)

效果 相关类介绍 QGraphicsView类提供了一个小部件,用于显示QGraphicsScene的内容。QGraphicsView在可滚动视口中可视化。QGraphicsView将滚动其视口,以确保该点在视图中居中。 QGraphicsScene类 提供了一个用于管理大量二维图形项的场景。请注意,QGraphicsScene没有自己的视…

【Spring】依赖注入之属性注入详解

前言: 我们在进行web开发时,基本上一个接口对应一个实现类,比如IOrderService接口对应一个OrderServiceImpl实现类,给OrderServiceImpl标注Service注解后,Spring在启动时就会将其注册成bean进行统一管理。在Co…

CleanMyMac最新版本4.14.5有哪些新功能?

CleanMyMac是一款专业的Mac清理工具,只需要一键智能清理,便能让Mac恢复原始的性能,是MAC系统非常好用的工具。CleanMyMac4.14.5自身拥有一个安全数据库,它是一个项目列表,拥有一定的规格,可以确保软件能够正…

销售技巧培训课程内容如何设计才能更好地落地

销售技巧培训课程内容如何设计才能更好地落地 在当今竞争激烈的市场环境中,销售人员的角色和作用越来越重要,是公司业绩来源的核心,也是公司能否在激烈竞争的市场中立于不败之地的关键。 因此,对销售人员进行有效的销售技巧培训&a…

两种伦敦银缺口 如何为我们的交易服务?

我们做伦敦银也会碰到缺口,有的朋友会说伦敦银不是24小时交易的品种吗?怎么有缺口呢?虽说伦敦银是24小时交易的品种,但是在北京时间的凌晨也会停止交易一段时间,这是平台结算时间。在亚盘早段伦敦银重新开盘之后&#…

40 mysql join 的实现

前言 join 是一个我们经常会使用到的一个 用法 我们这里 看一看各个场景下面的 join 的相关处理 测试数据表如下, 两张测试表, tz_test, tz_test03, 表结构 一致 CREATE TABLE tz_test (id int(11) unsigned NOT NULL AUTO_INCREMENT,field1 varchar(128) DEFAULT NULL,fi…

AWS攻略——创建VPC

文章目录 创建一个可以外网访问的VPCCIDR主路由表DestinationTarget 主网络ACL入站规则出站规则 子网创建EC2测试连接创建互联网网关(IGW)编辑路由表 知识点参考资料 在 《AWS攻略——VPC初识》一文中,我们在AWS默认的VPC下部署了一台可以SS…

Tomcat管理功能使用

前言 Tomcat管理功能用于对Tomcat自身以及部署在Tomcat上的应用进行管理的web应用。在默认情况下是处于禁用状态的。如果需要开启这个功能,需要配置管理用户,即配置tomcat-users.xml文件。 !!!注意:测试功…

Numpy 实现C4.5决策树

C4.5 信息增益比实现决策树 信息增益比 g R ( D , A ) g ( D , A ) H ( D ) g_{R}(D, A)\frac{g(D, A)}{H(D)} gR​(D,A)H(D)g(D,A)​ 其中, g ( D , A ) g(D,A) g(D,A)是信息增益, H ( D ) H(D) H(D)是数据集 D D D的熵 代码实现 import numpy as …

探究Spring Boot 中实现跨域的几种方式

文章目录 前言1. 使用CrossOrigin注解2. 使用WebMvcConfigurer配置3. 使用Filter配置4. 使用全局配置结束语 前言 在现代Web应用中,由于安全性和隐私的考虑,浏览器限制了从一个域向另一个域发起的跨域HTTP请求。解决这个问题的一种常见方式是实现跨域资…

webpack学习-3.管理输出

webpack学习-3.管理输出 1.简单练手2.设置 HtmlWebpackPlugin3.清理 /dist 文件夹4.manifest5.总结 1.简单练手 官网的第一个预先准备,是多入口的。 const path require(path);module.exports {entry: {index: ./src/index.js,print: ./src/print.js,},output: …

基于SSM框架家电商城系统分前后台【项目源码+数据库脚本+报告】

一、项目简介 本项目是一套基于SSM框架家电商城系统,主要针对计算机相关专业的正在做bishe的学生和需要项目实战练习的Java学习者。 包含:项目源码、数据库脚本等,该项目可以直接作为bishe使用。 项目都经过严格调试,确保可以运行…

Mysql 日期函数大全

一、时间函数 (一)、获取当前时间 1、NOW() 获取当前日期和时间,在程序一开始执行便拿到时间 返回格式 YYYY-MM-DD hh:mm:ss eg: NOW() 得到 2023-12-03 12:20:02 NOW(),SLEEP(2),NOW() 得到 2023-12-03 12:20:02 | 0 | 2023-…

HeyGen推出Avatar2.0:AI视频翻译工具引领虚拟分身创作新时代

在数字创意领域迈向新的里程碑,HeyGen公司正式推出了Avatar2.0,这是一款令人惊叹的AI视频翻译工具,仅需短短5分钟,用户即可在手机上打造一个逼真的虚拟分身。HeyGen的这一最新创新标志着他们在多模态内容生成领域的持续引领地位&a…

对象数组根据布尔值true和false进行排序——js基础积累

对象数组根据布尔值true和false进行排序——js基础积累 应用场景:效果图如下:根据布尔值进行排序总结:1.true的放前面——算降序排列2.true的放后面——算升序排列 应用场景: 最近在写后台管理系统的时候,遇到一个需求…

MySQL:update set的坑

目录 一、问题描述 二、为何会出现这样的问题? 三、正确的方案 一、问题描述 我在修改mysql数据表时,看到下面的现象。 我表中原始数据如下: 执行了下面的修改,显示执行成功。 update user_function_record_entity set open_…

Android的启动模式

Android的四种启动模式:standard、singleTop、singleTask和singleInstance。 1.standard Android默认的启动模式是standard,每启动一个Activity,它都会在返回栈中入栈,并处于栈顶,不管这个返回栈是否存在这个activit…