从一次netty分享漫谈

news2024/12/25 9:02:21

从一次netty分享漫谈

1.前言

上周五,笔者所在的开发小组,组织了一场分享,内容是netty的入门。笔者所在的团队,基本上就是在各条业务线中活蹦乱跳,有经验的看官,到这里已经可以给出分享效果的总体预测:“上次面试完就不记得了”;“好像用过,记不起来”;“这图有点复杂”。。。
所以,今天本博客有了第三篇netty入门

2. 高质量的分享可能长这样

从前言的吐槽,可以感受,分享的效果大概率就是呵呵;绝大部分开发同学上台开讲,多少都会有这味道,why?
主观臆断原因1:真正有壁垒,有内容的部分,分享的时长不足以完全掰碎讲明白;
主观臆断原因2:开发同学大部分情商偏低,基本上组织文档,以自己能提供啥为导向,不以效果为导向。

笔者倾向的高质量分享:
1 以听众为中心梳理内容、结构;在自洽之余,帮助听众,构建该知识点的知识地图/建立索引;
2 难度和门槛,要和听众能力相对匹配(给一年级上6年纪的,那是学而思)

3. netty知识地图

netty是什么

Netty 是由 JBOSS 提供的一个 Java 开源框架,现为 Github上的独立项目。

Netty 是一个 异步的、基于事件驱动 的 网络应用框架,用以快速开发高性能、高可靠性的 网络 IO 程序。相当于简化和流程化了 NIO 的开发过程。

Netty主要针对在 TCP协议下,面向Clients端的高并发应用,或者Peer-to-Peer场景下的 大量数据持续传输 的应用。
在这里插入图片描述
Netty本质是一个 NIO框架,适用于 服务器通讯 相关的多种应用场景。

netty怎么运行-线程模型

于框架而言,线程模型是重中之重,线程模型图一出,系统如何work则一目了然。

Reactor 模式

Reactor模式 是一种「事件驱动」模式。

「Reactor线程模型」就是通过 单个线程 使用Java NIO包中的Selector的select()方法,进行监听。当获取到事件(如accept、read等)后,就会分配(dispatch)事件进行相应的事件处理(handle)。

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

基于线程池复用线程资源:不必再为每个连接创建线程,将连接完成后的业务处理任务分配给线程进行处理,一个线程可以处理多个连接的业务。
Reactor 模式使用 IO复用 监听事件,收到事件后,分发给某个线程(进程),这点就是网络服务器高并发处理关键
在这里插入图片描述
Reactor:Reactor 在一个单独的线程中运行,负责监听和分发事件,分发给适当的处理程序来对 IO 事件做出反应。 它就像公司的电话接线员,它接听来自客户的电话并将线路转移到适当的联系人;

Handlers:处理程序执行 I/O 事件要完成的实际事件,类似于客户想要与之交谈的公司中的实际官员。Reactor 通过调度适当的处理程序来响应 I/O 事件,处理程序执行非阻塞操作。

单 Reactor 单线程

代表选手:redis
在这里插入图片描述

单 Reactor 多线程

在这里插入图片描述

主从 Reactor 多线程

在这里插入图片描述
Netty 主要基于 主从 Reactors 多线程模型 做了一定的 改进,其中主从 Reactor 多线程模型有多个 Reactor。

相关知识点

  • 零拷贝
  • BIO,NIO,AIO

netty能干啥

  • Http的server和client
  • Websocket的server和client
  • RPC框架

4. 总结

1 笔者尝试结构化输出netty相关知识
2 于框架而言,线程模型是重中之重,学习框架当掌握线程模型

参考:https://www.51cto.com/article/666816.html
参考:https://lish98.blog.csdn.net/article/details/124232377

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Gradle 各个版本下载

每次都要找下载地址,还是记录一下好找点。 http://services.gradle.org/distributions

Unreal 5 官方在Niagara里模拟大型群体笔记

官方视频地址:https://www.bilibili.com/video/BV1FX4y1T7z2/ 如果需要,请查看官方视频。 性能测试 在讲解Niagara之前,视频首先做了一个性能测试,首先放置了100个AI角色,可以想目标角色移动的ai,然后测试…

C语言:猜凶手

题目: 日本某地发生了一件谋杀案,警察通过排查确定杀人凶手必为4个嫌疑犯的一个。 以下为4个嫌疑犯的供词: A说:不是我。 B说:是C。 C说:是D。 D说:C在胡说 已知3个人说了真话,1个人说的是假话。…

山西电力市场日前价格预测【2023-07-03】

日前价格预测 预测明日(2023-07-03)山西电力市场全天平均日前电价为333.50元/MWh。其中,最高日前电价为398.66元/MWh,预计出现在15: 15。最低日前电价为280.73元/MWh,预计出现在24: 00。 以上预测仅供学习参考&#x…

Spring第一讲:Spring基础概念和环境搭建

一、Spring是什么 Spring 是 Java EE 编程领域的一款轻量级的开源框架,由被称为“Spring 之父”的 Rod Johnson 于 2002 年提出并创立,它的目标就是要简化 Java 企业级应用程序的开发难度和周期。 Spring 自诞生以来备受青睐,一直被广大开发…

二叉树各种函数的实现

如果你觉得迷茫,那就尽可能选择比较困难的路。 目录 前言: 🍀一.通过前序遍历创建二叉树 🍁二.二叉树的四种遍历 🍂1.二叉树的前序遍历 🌼2.二叉树的中序遍历 🍌3.二叉树的后序遍历 …

Mac VSCode配置运行单个C++文件

题外话:VSCode一键整理代码快捷键:ShiftoptionF 方法一:命令行直接编译 g -o 想创建的可执行文件名 ./cpp文件名 ./可执行文件名 以test.cpp为例,我创建的可执行文件名为test,运行结果如下: 方法二&#…

SpringCloud-Nacos配置管理

文章目录 Nacos配置管理统一配置管理在nacos中添加配置文件从微服务拉取配置 配置热更新方式一方式二 配置共享1)添加一个环境共享配置2)在user-service中读取共享配置3)运行两个UserApplication,使用不同的profile3)运…

React教程(由浅到深)

文章目录 1. 基本语法1.1 初体验Hello React1.2 JSX语法的基本使用1.2.1 语句与表达式说明 1.3. React面向组件编程1.3.1 函数组件与类组件 1.4 组件实例的三大特性1.4.1 state数据存储状态1.4.2 props的使用1.4.2.1基本使用1.4.2.2 做限制类型,默认值使用1.4.2.3 简…

2、boostrap 多数据类型表单

fileinput 视频图片文本数据表单 插件下载地址&#xff1a;https://github.com/kartik-v/bootstrap-fileinput/ 1、多类型数据from测试 <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><title>Title</tit…

Jeston Xavier NX 模块将系统迁移到NVME存储

大家好&#xff0c;我是虎哥&#xff0c;最近完成了自己设计的第一个Xavier NX的载板设计和打样&#xff0c;虽然还有一些小的不完善的地方&#xff0c;但是可以正常使用&#xff0c;这里记录和分享一下我自己设计的载板上如何实现系统迁移。 我自己使用SDK Manager 安装了所有…

c# Invoke使用

在多线程编程中&#xff0c;我们经常要在工作线程中去更新界面显示&#xff0c;而在多线程中直接调用界面控件的方法是错误的做法&#xff0c;Invoke 和 BeginInvoke 就是为了解决这个问题而出现的&#xff0c;使你在多线程中安全的更新界面显示。 正确的做法是将工作线程中涉…

青少年机器人技术一级考试备考重点(三):简单机械

随着机器人技术的飞速发展&#xff0c;越来越多的青少年开始关注并参与其中。青少年机器人技术考试作为一项评估学生机器人技术水平的重要考试&#xff0c;备受广大青少年和家长的关注。为了更好地备战青少年机器人技术一级考试&#xff0c;了解考试的学习要点和备考重点是非常…

【C++初阶】11. list的使用及模拟实现

1. list的介绍 list是可以在常数范围内在任意位置进行插入和删除的序列式容器&#xff0c;并且该容器可以前后双向迭代。list的底层是双向链表结构&#xff0c;双向链表中每个元素存储在互不相关的独立节点中&#xff0c;在节点中通过指针指向其前一个元素和后一个元素。list与…

清华青年AI自强作业hw5:基于CNN实现CIFAR10分类任务

清华青年AI自强作业hw5&#xff1a;基于CNN实现CIFAR10分类任务 简述作业实现遇到的问题相关链接 一起学AI系列博客&#xff1a;目录索引 简述 hw5作业为利用深度卷积神经网络实现CIFAR_10数据集十分类问题&#xff0c;帮助理解CNN的前向传播结构。 CIFAR-10是一个常用的彩色图…

现代处理器结构

本文翻译自&#xff1a;Modern Microprocessors A 90-Minute Guide!&#xff0c;&#xff0c;我认为原文是相当好的计算机体系结构方面的概述&#xff0c;与时代相结合是国内计算机课本普遍缺失的一环&#xff0c;本文可作为一个有效的补充&#xff0c;向原作者和其他译者表示感…

青岛大学_王卓老师【数据结构与算法】Week03_09_线性表的链式表示和实现9_学习笔记

本文是个人学习笔记&#xff0c;素材来自青岛大学王卓老师的教学视频。 一方面用于学习记录与分享&#xff0c;另一方面是想让更多的人看到这么好的《数据结构与算法》的学习视频。 如有侵权&#xff0c;请留言作删文处理。 课程视频链接&#xff1a; 数据结构与算法基础–…

软件测试面试-银行篇

今天参加了一场比较正式的面试&#xff0c;汇丰银行的视频面试。在这里把面试的流程记录一下&#xff0c;结果还不确定&#xff0c;但是面试也是自我学习和成长的过程&#xff0c;所以记录下来大家也可以互相探讨一下。 请你做一下自我介绍&#xff1f;&#xff08;汇丰要求英…

如何在VUE项目中使用svg图标

一文带你搞定svg图标的使用&#xff01; 文章目录 前言一、SVG相较于字体图标的优点二、使用步骤1.新建一个vue2项目2.安装项目依赖3 .在src目录下新建文件夹4.创建svg-icon组件5.在main.js中引入icons下的index.js6.配置 vue.config.js7.步骤完毕&#xff0c;检验成果 总结 前…

LoadRunner负载均衡与IP欺骗

目录 前言&#xff1a; 一、IP wizard 二、一个IP欺骗测试脚本 三、Controller与Runtime setting设置 四、mdrv.dat配置调整 五、查看实现效果 【结语】 前言&#xff1a; 在使用 LoadRunner 进行负载测试时&#xff0c;负载均衡和 IP 欺骗是两个重要的概念。 这次出差…