首页 > 其他分享 >Netty-基础篇(4)

Netty-基础篇(4)

时间:2023-11-20 21:45:33浏览次数:34  
标签:Netty NIO 模型 基础 线程 客户端 多线程 Reactor

不使用Java原生NIO编程的原因

1、NIO的类库和API复杂,使用麻烦

2、需要具备其他的额外技能做铺垫,例如熟悉Java多线程编程

3、可靠性能力补齐,工作量和难度都非常大。例如客户端面临断线重连、网络闪断、半包读写、失败缓存、网络拥塞和异常码流的处理等问题。

4、JDK NIO的BUG,例如臭名昭著的epoll bug,它会导致Selector空轮询,最终导致CPU100%。官方声称在JDK1.6版本的update18修复了该问题,但是知道JDK1.7版本该问题依然存在,只是概率降低了。

三层网络架构

1.Reactor通信调度层

2.职责链ChannelPipeline

3.业务逻辑编排层(Service ChannelHandler)

线程模型

Reactor,NIO框架对于Reactor实现本质上还是遵循其基础线程模型

单线程模型

指所有的I/O操作都在同一个NIO线程上面完成

多线程模型

特点:

1.有专门一个NIO线程——Acceptor线程用于监听服务端,接收客户端的TCP连接请求

2.网络I/O操作——读、写由一个NIO线程负责,线程池可以采用标准的JDK线程池实现,它包含一个任务队列和N个可用的线程,由这些NIO线程负责消息的读取、解码、编码和发送

3.一个NIO线程可以同时处理N条链路,但是一个链路只对应一个NIO线程,防止发生并发操作问题

主从多线程模型

1.服务端用于接收客户端连接的不再是一个单独的NIO线程,而是一个独立的NIO线程池

2.可以解决一个服务端监听线程无法有效处理所有客户端连接的性能不足问题

Netty线程模型

支持Reactor单线程模型、多线程模型、主从多线程模型

标签:Netty,NIO,模型,基础,线程,客户端,多线程,Reactor
From: https://www.cnblogs.com/nxjblog/p/17844960.html

相关文章

  • 【尝试逆向】零基础尝试寻找某个C++游戏的文件读取方法
    前言本游戏在国内知名度非常一般,而且在游戏领域也算是非常少见的厂商完全不考虑国际化的游戏系列,距今已有近30年的历史。这次为了尝试对此游戏的贴图进行提取,我尝试下载了本游戏系列的大概所有版本,并尝试通过脱壳等手段找到贴图的提取函数,并想办法写出来提取用的脚本。不过目前......
  • Dom事件基础(pink老师课程笔记)
    事件监听(绑定)事件和事件监听事件是在编程时系统内发生的动作或者发生的事情,比如用户在网页上单击一个按钮让程序检测是否有事件产生,一旦有事件触发,就立即调用一个函数做出响应,也称为绑定事件或者注册事件比如鼠标经过显示下拉菜单,比如点击可以播放轮播图等等语法元素对象......
  • (二十一)C#编程基础复习——Array类
    Array类是C#中所有数组的基类,其中提供了一系列用来处理数组的操作,例如对数组元素进行排序、搜索数组中指定的元素等。Array类中提供了一系列属性,通过这些属性可以获取数组的各种信息。Array类中的常用属性有如下表所示:Array类中的方法,除了属性之外,Array类中还提供了一系列的方法......
  • Lab5: 面向功能程序构造方法及创新应用 (基础)
    1、构造两数交换的函数,并验证各种参数形式代码#include<iostream>usingnamespacestd;//交换两个整数的值voidswap(int&a,int&b){inttemp=a;a=b;b=temp;}//交换两个浮点数的值voidswap(double&a,double&b){doubletemp=a;......
  • C++U3-第1课-基础排序(一)
    学习目标排序的概念  本阶段会学习的排序有 冒泡排序概念 第一轮比较,与交换 例题1:一趟交换 例题2:多躺比较,冒泡排序 【题意分析】进行n-1趟冒泡排序的过程,每一次输出当前一趟冒泡排序完的结果【思路分析】定义一个n,输入当前的n和储存n个数的数组for......
  • 半导体基础SECS协议(SECS - II)
    SECS-II协议定义了使用如SECS-I、HSMS等传输协议在设备和主机之间交换的消息的形式和含义,是SECS四项基础协议中的核心。往下,HSMS、SECS-I等物理协议为其服务,通过某种传输介质,在设备间传输SECS-II消息(此时SECS-II消息存储在物理层协议消息结构的DATA部分中,详见随笔-HS......
  • Lua的基础与运用
    Lua编辑器Lua的基础Lua的教学网址Lua的编辑器编辑器调试 点击选项——调试参数配置,在脚本工作目录里选择位置,之后lua脚本都需要在该目录里,之后下面两个都打钩,点击确定。 窗口界面可以建立垂直布局  Lua的基础注释单行注释:--注释内容多行注释:--[[多行注......
  • 2023-2024-1 20231413 《计算机基础与程序设计》第八周学习总结
    2023-2024-120231413《计算机基础与程序设计》第八周学习总结1.作业信息班级:2023-2024-1-计算机基础与程序设计作业要求:2023-2024-1《计算机基础与程序设计》教学进程目标:自学教材:计算机科学概论第9章并完成云班课测试《C语言程序设计》第7章并完成云班课测试作业正文:h......
  • Netty源码学习4——服务端是处理新连接的&netty的reactor模式
    系列文章目录和关于我零丶引入在前面的源码学习中,梳理了服务端的启动,以及NioEventLoop事件循环的工作流程,并了解了Netty处理网络io重要的Channel,ChannelHandler,ChannelPipeline。这一篇将学习服务端是如何构建新的连接。一丶网络包接收流程当客户端发送的网络数据帧通过网......
  • 十四.SPI使用1——SPI基础和ICM20608的使用
    在日常设备使用中,最常用通讯协议就是I2C和SPI了,前面过了一遍I2C,I2C接口速度最快能到400K,但是SPI能到几时兆。下面我们来实现SPI的使用。SPI接口SPI硬件定义SPI和I2C一样属于一种串行通讯协议,但是I2C需要2根线实现通讯,这样就限制了传输的速度;SPI则需要4根线才能数据通信(如果是......