netty学习

netty是一个 NIO 框架,它提供了一个高性能、异步事件驱动的网络应用程序框架

NIO
三大主键
channel&buffer  通道/缓冲 ?有哪些
selector   选择器  (适合连接多,流量低)多路复用  单线程配合selector管理多个channel

适合
多线程设计适合 少连接
线程池适合 短连接( 没有处理完就堵塞)

selector管理多个channel

FileChannel

byteBuffer 指针/limit/容量
byteBuffer默认写模式   
flip读模式      clear写  compact压缩指针

粘包:多条数据同时发送                                                                                                                  半包  :因为空间限制 只发送了一半
零拷贝 channelTransterTo    不用将数据拷贝到java中 jvm,适合小文件, 
遍历 fileWalkfileTree   访问者模式                                                                                                           

阻塞
非阻塞 自旋耗cpu
seletor 解决自旋

seletor监听的事件
accept
connect
read
write

netty

组件
eventLoop(事件循环)
单线程执行器 处理channel上的IO事件
eventLoopGroup组   处理IO事件 普通任务 定时任务    默认cpu核心X2

channel通道
pipeline(流水线)添加处理方法 handler
write写入(不是马上刷出 要调用flush)
writeAndFlush写入刷出
ChannelFuture是Netty中的一个接口,它表示一个异步操作的结果。ChannelFuture可以用于监听异步操作的结果,并在结果完成时进行处理。closeFuture关闭

future和promise    jdkfuturenettyfuture《promise   
jdkfuture:
get()阻塞等待

nettyfuture:可以同步和异步得到结果
getnow 等待结果非阻塞 没有就null
sync阻塞等待结束 失败抛异常
await 阻塞等待结束 失败不抛异常 要用isSuccess判断是否成功
cause获取失败信息 阻塞
addlinstenee 异步获取结果

promise   :两个容器间传递结果
setSuccess设置成功
setfailure 设置失败

channel的handler和pipeline  元素和容器 
handler处理入站和出站  
 

byteBuf (netty) 区别红
是基于内存的(默认)读写高,不消耗GC 创建和销毁大     可以切换  堆内存
提供了更多的操作方法,比如读取、写入、复制、转换等 
扩容(容量 ,最大容量之间)
池化(默认开启)4.1版本以后
组成 指针(读写),limti ,容量 ,最大容量
写入(各种类型 boolean(01),int (大小),long 等)
对应的读取   读写分离
回收(引用计数(初始1) 调用+1或者-1  等于0就被回收)
头尾释放提高内存使用率
零拷贝

byteBuffer(NIO)
是堆内存的  收到GC影响
读取、写入
组成 指针,limti ,容量
 

netty零拷贝
byteBuf.slice (大的byteBuf切成小的)
切片没有发生复制 原始的不变,不能再写入限制了容量从一个 ByteBuf 复制到另一个 ByteBuf
composite(小的组成大的)切片没有发生复制
 

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

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

相关文章

1.5.1 git/svn日志格式规范

文章目录 git日志规范一 基本原则二 日志格式1 type:2 keys3 subject4 body5 footergit日志规范 一 基本原则 《规则1》小步提交,每个功能模块分别提交 《规则2》源文件与修改文件,分别提交 《规则3》 二 日志格式 type:keys:subject:body:footer 1 type: - `feat`: 新…

【c++|SDL】开始使用之---demo

every blog every motto: You can do more than you think. https://blog.csdn.net/weixin_39190382?typeblog 0. 前言 SDL 记录 1. hello word #include<SDL2/SDL.h>SDL_Window* g_pWindow 0; SDL_Renderer* g_pRenderer 0;int main(int argc, char* args[]) {//…

EasyExcel导入及自定义导入

1.maven <!-- Excel --><dependency><groupId>com.alibaba</groupId><artifactId>easyexcel</artifactId><version>3.3.1</version></dependency> 2.默认使用 List<CrmInvestmentImport> crmInvestmentImportLis…

触控板窗口管理软件Swish mac中文版

Swish mac是一款触控板窗口管理工具&#xff0c;它允许用户通过简单的手势来控制窗口。Swish利用MacBook的触控板&#xff0c;使得用户可以更加便捷地管理窗口。它支持多种手势&#xff0c;例如捏合、拖动、放大和缩小等&#xff0c;使得用户可以轻松地实现窗口的切换、最小化、…

Milvus入门手册1.0

一、window环境搭建&#xff08;单机&#xff09; 1、docker安装 略 2、milvus安装 参考文档&#xff1a;https://milvus.io/docs/install_standalone-docker.md tips: &#xff08;1&#xff09;compose.yaml下载比较慢&#xff0c;可以在网络上找一份。 &#xff08;2&…

VScode集成python开发环境和基本插件下载配置

VSCode开发工具 下载VSCode VSCode官方首页&#xff1a;Visual Studio Code - Code Editing. Redefined 点击Download for Windows下载 安装过程一路下一步即可&#xff0c;其中建议勾选 将"通过Code打开"操作添加到Windows资源管理器目录上下文菜单方便我们直接通过…

虹科Pico汽车示波器 | 汽车免拆检修 | 2016款东风悦达起亚K5车发动机怠速抖动严重、加速无力

一、故障现象 一辆2016款东风悦达起亚K5车&#xff0c;搭载G4FJ发动机&#xff0c;累计行驶里程约为8.2万km。该车发动机怠速抖动严重、加速无力&#xff0c;同时发动机故障灯异常点亮&#xff0c;为此在其他维修厂更换了所有点火线圈和火花塞&#xff0c;故障依旧&#xff0c;…

309.最佳卖股票的时机包含冷冻期

一、题目分析 给定一个整数数组prices&#xff0c;其中第 prices[i] 表示第 i 天的股票价格 。​ 设计一个算法计算出最大利润。在满足以下约束条件下&#xff0c;你可以尽可能地完成更多的交易&#xff08;多次买卖一支股票&#xff09;: 卖出股票后&#xff0c;你无法在第二…

Nacos源码本地搭建流程及目录结构解读

下载地址 https://github.com/alibaba/nacos 目录结构 本地单机启动 首先maven编译完成之后在console下面找到Nacos 这个就是主启动类 然后再vm中配置参数-Dnacos.standalonetrue表示单机启动 当控制台没有报错 访问 http://localhost:8848/nacos 控制台界面登录进来之后显…

Linux—进程状态、僵尸进程、孤独进程、优先级

&#x1f4d8;北尘_&#xff1a;个人主页 &#x1f30e;个人专栏:《Linux操作系统》《经典算法试题 》《C》 《数据结构与算法》 ☀️走在路上&#xff0c;不忘来时的初心 文章目录 一、进程状态二、僵尸进程、孤儿进程1、Z(zombie)-僵尸进程2、僵尸进程危害3、孤儿进程 三、进…

C++——vector基本概念,构造函数,赋值操作与容量和大小

一.vector基本概念 功能:vector数据结构和数组非常类似,也称为单端数组 vector与普通数组的区别:不同之处在于数组是静态空间,而vectors可以动态扩展 动态扩展:并不是在原空间之后继续接新空间,而是找更大的内存空间,然后将原有数据拷贝新空间,释放原有空间 vector容器内部结…

String类讲解(1)

&#x1f435;本篇文章将讲解String类及其包含的方法 一、介绍String类 String属于引用类型&#xff0c;String类是Java的一个内置类&#xff0c;用于表示字符串&#xff0c;String类中具有许多方法&#xff0c;可以用来操作和处理字符串 二、字符串的构造 下面介绍三种构造字…

蓝桥杯每日一题2023.11.27

题目描述 星系炸弹 - 蓝桥云课 (lanqiao.cn) 题目分析 对于此题目一一枚举即可 #include<bits/stdc.h> using namespace std; bool is_r(int n) {if((n % 4 0 && n % 100 ! 0)|| n % 400 0)return true;return false; } int mm[13] {0, 31, 28, 31, 30, 3…

万字详解,和你用RAG+LangChain实现chatpdf

像chatgpt这样的大语言模型(LLM)可以回答很多类型的问题,但是,如果只依赖LLM,它只知道训练过的内容,不知道你的私有数据:如公司内部没有联网的企业文档,或者在LLM训练完成后新产生的数据。(即使是最新的GPT-4 Turbo,训练的数据集也只更新到2023年4月)所以,如果我们…

Docker入门教程

&#x1f337;&#x1f341; 博主猫头虎&#xff08;&#x1f405;&#x1f43e;&#xff09;带您 Go to New World✨&#x1f341; &#x1f984; 博客首页——&#x1f405;&#x1f43e;猫头虎的博客&#x1f390; &#x1f433; 《面试题大全专栏》 &#x1f995; 文章图文…

微服务--02--Nacos注册中心

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 服务注册和发现手动发送Http请求的方式存在问题注册中心原理 Nacos注册中心配置服务注册服务发现小结&#xff1a; 服务注册和发现 手动发送Http请求的方式存在问题…

Android使用WebView展示本地html网页

Android使用WebView展示本地html网页 1、在assets目录下新建html文件 新建agreement.html文件&#xff0c;内容如下&#xff1a; <html> <head><title>用户协议</title> </head> <body> <h1>用户协议</h1> </body> &…

Compensated Summation/Kahan‘s Summation的理解

阅读《Efficient Generation of Error-Inducing Floating-Point Inputs via Symbolic Execution》这篇论文时&#xff0c;文中提到的Commpensated Summation没看太懂&#xff0c;代码如下&#xff1a; 查阅资料发现Compensated Summation也叫Kahan’s Summation&#xff0c;该…

Termius 一款优秀的跨平台 SSH 客户端工具

&#x1f525;&#x1f525;&#x1f525; 作为程序员或者运维管理人员&#xff0c;我们经常需要使用终端工具来进行服务器管理及各种操作&#xff0c;比如部署项目、调试代码、查看/优化服务、管理服务器等。 而实现远程服务器连接需要借助 SSH 协议来进行&#xff0c;SSH&am…

青少年CTF之PHP特性练习(1-5)

青少年CTF-PHP特性练习 文章目录 青少年CTF-PHP特性练习PHP特性01PHP特性02PHP特性03PHP特性04PHP特性05 PHP特性01 看给出的源码&#xff0c;两个变量的值加密后的MD5相同 <?php$s1 "%af%13%76%70%82%a0%a6%58%cb%3e%23%38%c4%c6%db%8b%60%2c%bb%90%68%a0%2d%e9%47…