Netty中Reactor线程的运行逻辑

server/2024/10/20 6:20:07/

Netty中的Reactor线程主要干三件事情:

  • 轮询注册在Reactor上的所有Channel感兴趣的IO就绪事件

  • 处理Channel上的IO就绪事件

  • 执行Netty中的异步任务。

正是这三个部分组成了Reactor的运行框架,那么我们现在来看下这个运行框架具体是怎么运转的~~

这里需要注意的是netty只会自动注册OP_READ事件,而OP_WRITE事件是在当Socket写入缓冲区以满无法继续写入发送数据时由用户自己注册。

这里假设一种极端情况,如果最近的一个定时任务的deadline是在未来很远的一个时间点,这样就会使timeoutMillis的时间非常非常久,那么Reactor岂不是会一直阻塞在Selector上造成 Netty 无法工作?

Reactor正在Selector上阻塞时,如果此时用户线程向Reactor提交了异步任务,Reactor线程会通过execute方法被唤醒。

Reactor线程唤醒时机

Reactor运行核心逻辑:

Reactor线程运行时结构.png

Reactor工作流程图.png

Reactor分配任务执行时间.png

参考:一文聊透Netty核心引擎Reactor的运转架构


http://www.ppmy.cn/server/52830.html

相关文章

Mysql 官方提供的公共测试数据集 Example Databases

数据集:GitHub - datacharmer/test_db: A sample MySQL database with an integrated test suite, used to test your applications and database servers 下载 test_db: https://github.com/datacharmer/test_db/releases/download/v1.0.7/test_db-1.0.7.tar.gz …

pytorch 源码阅读(2)——torch._dynamo.optimize

0 torch._dynamo.optimize(backend, *, nopython, guard_export_fn, guard_fail_fn, disable, dynamic),TorchDynamo 的主入口点 1 参数说明 backend,一般有两种情况: 一个包含 torch.fx.GraphModule 和 example_inputs,返回一个…

职升网:环评师考试成绩查询时间分享!

成绩查询时间 根据多个省市地区发布的2024年环境影响评价工程师的报名通知,预计2024年环境影响评价工程师考试成绩的查询时间将在2024年7月下旬开启。 成绩合格标准 2024年环境影响评价师考试的合格标准如下: 环境影响评价相关法律法规:科…

高内聚低耦合【代码:ShoppingCart(一个类中提供多种操作购物车的方法体现高内聚)支付方式接口(信用卡类、微信支付类实现支付接口 体现低耦合)】

高内聚低耦合 ⾼内聚指的是:⼀个模块中各个元素之间的联系的紧密程度,如果各个元素(语句、程序段)之间的联系程度越⾼,则内聚性越⾼,即 “⾼内聚”。 低耦合指的是:软件中各个层、模块之间的依赖关联程序越低越好。修…

Node.js 渲染三维模型并导出为图片

Node.js 渲染三维模型并导出为图片 1. 前言 本文将介绍如何在 Node.js 中使用 Three.js 进行 3D 模型渲染。通过结合 gl 和 canvas 这两个主要依赖库,我们能够在服务器端实现高效的 3D 渲染。这个方法解决了在服务器端生成和处理 3D 图形的需求,使得可…

扫码点餐系统源码

让餐饮体验更智能、更高效 扫码点餐,支持排队预约,餐饮行业必备工具​ 📱 引言:智能餐饮时代的来临 在快节奏的现代生活中,餐饮行业也迎来了智能化变革。其中,扫码点餐系统作为一种创新的点餐方式&#x…

计算机毕业设计Thinkphp/Laravel智能道路交通管理系统4ir8r

Laravel非常的简洁并且是开源的,Laravel 是一个具有表现力、优雅语法的 Web 应用程序框架. Laravel 是构建现代全栈 Web 应用程序的最佳选择. 它的语法更富有表现力,拥有高质量的文档和丰富的扩展包,技术上它有Bundle扩展包、Eloquent ORM、反…

解释SpringCloud Config的作用

Spring Cloud Config是Spring Cloud项目的核心组件之一,它提供了一个服务器和客户端的解决方案来实现分布式系统的配置管理。通常,在微服务架构中,每个服务需要有一些配置信息来正确运行,如数据库连接信息、外部服务地址、应用功能…