Netty-面试题(中)(五十)

关于零拷贝和堆外内存

Java在将数据发送出去的时候,会先将数据从堆内存拷贝到堆外内存,然后才会将堆外内存再拷贝到内核态,进行消息的收发,代码如下:

所以,我们发现,假如我们在收发报文的时候使用直接内存,那么就可以减少一次内存拷贝,Netty就是这么做的。
Netty在通信层进行字节流的接收和发送的时候,如果应用允许Unsafe访问,则会采用DirectBvteBuf进行转换也就是堆外的直接内存,代码如下:

 CompositeByteBuf

考虑一种场景,当一个数据包被拆成了两个字节流通过TCP传输过来后,那么对于接收者的机器来说,为了方便解析,它需要新建一个BvteBuf将这两个字节流重组成一个新的数据包,如下图所示:

那么在这种情况下,我们如果直接将两个字节流拷贝到一个新的字节流中,显然会浪费空间和时间,所以Netty推出了CompositeByteBuf,专门用来拷贝ByteBuf

Unpooled.wrappedBuffer

Unpooled.wrappedBuffer 是创建 CompositeByteBuf 对象的另一种推荐做法。
Unpooled.wrappedBuffer 方法可以将不同的数据源的一个或者多个数据包装成一个大的 BvteBuf 对象,其中数据源的类型包括 bytel、ByteBuf、ByteBufer。包装的过程中不会发生数据拷贝操作,包装后生成的 ByteBuf 对象和原始 ByteBuf 对象是共享底层的 byte 数组,

ByteBuf.slice

ByteBuf.slice 和 Unpooled.wrappedBuffer 的逻辑正好相反,ByteBuf.sice 是将一个 ByteBuf对象切分成多个共享同一个底层存储的 BvteBuf 对象。

FileRegion文件传输

Netty 使用 FileRegion 实现文件传输的零拷贝,而FileRegion其实是基于Java底层的FileChannel#tranferTo方法实现的。它可以根据操作系统直接将文件缓冲区的数据发送到目标channel,底层借助了sendFile能力避免了传统通过循环write方式导致的内存拷贝问题。所以 FileRegion 是操作系统级别的零拷贝。

sendFile

JDK原生的FileChannel#tranferTo方法其实是基于了Linux的sendFile方法,通过该方法,数据可以直接在内核空间内部进行 I/O 传输,从而省去了数据在用户空间和内核空间之间的来回拷贝。工作原理如下图:

 

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

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

相关文章

地产人的福音!VR全景分屏对比,让装修施工一目了然

现如今,VR全景已成为地产行业不可或缺的应用工具,从地产直播到楼市VR地图,从效果图到水电家装施工记录,可以说整个地产行业的上下游生态中都可以看到720云VR全景的身影。 以720云VR全景作为直播载体 VR全景高清矩阵地图等多种内容…

使用python开发的闭运算调试器

使用python开发的开运算调试器 简介效果代码 简介 用来调试闭运算效果的小工具,滑动条可以控制滤波核的大小,用来查看不同滤波核下的闭运算效果。 效果 代码 import sys from PyQt5.QtWidgets import QApplication, QWidget, QVBoxLayout, QHBoxLayou…

为什么要用机架式液冷负载

机架式液冷负载是一种先进的散热技术,它通过将冷却液直接引入服务器的热源,实现对服务器内部组件的高效散热。与传统的空气冷却方式相比,机架式液冷负载具有更高的散热效率、更低的能耗和更长的设备寿命等优点。以下是使用机架式液冷负载的几…

Saas详解

1. 什么是Saas SaaS(Software-as-a-Service),简单点理解就是软件即服务,即通过网络提供软件服务。 在SaaS模型中,用户不需要在本地安装软件,而是通过网络(通常是浏览器)访问应用程…

ValueError: source code string cannot contain null bytes

导入pandas报如下错误: 解决: pandas好像只支持到3.8,我的python是3.10,改成3.7就能正常使用了

Spire.PDF for .NET【文档操作】演示:将多个 PDF 文件中的选定页面合并为一个

使用 Spire.PDF,您不仅可以将多个 PDF 文件合并为一个文件,还可以从源文件中选择特定页面并将它们合并为一个 PDF 文档。以下代码片段演示了相同的内容。 Spire.PDF for .NET 是一款独立 PDF 控件,用于 .NET 程序中创建、编辑和操作 PDF 文档…

高血压患者可以吃什么?不可以吃什么?

点击文末领取揿针的视频教程跟直播讲解 随着生活水平的提高,越来越多的人得上了“新四高”——高血压、高血脂、高血糖、高尿酸。 一旦惹上这些慢性病,那就得「管住嘴」了~但究竟什么能吃、什么不能吃,还是有很多人不清楚 高血压患者应该遵…

实在智能AI+RPA:引领数字化转型的超自动化智能体

引言 在数字化时代,企业面临着前所未有的挑战和机遇。数字化转型不仅是企业生存的需要,更是实现持续增长和创新的关键。AIRPA作为数字化转型的重要驱动力,正帮助企业实现业务流程的自动化和智能化,从而提升效率、降低成本、增强竞…

树莓派指令raspi-gpio控制gpio引脚输出输入

raspi-gpio help 帮助 raspi-gpio get 获取引脚状态 level是电平, func是功能 raspi-gpio set 设置gpio引脚 raspi-gpio set 20 pu op dl 20是GPIO20, pu是上拉, op是output输出, dl是drive low低电平

React 第三十章 React 和 Vue 描述页面的区别

面试题:React 和 Vue 是如何描述 UI 界面的?有一些什么样的区别? 标准且浅显的回答: React 中使用的是 JSX,Vue 中使用的是模板来描述界面 前端领域经过长期的发展,目前有两种主流的描述 UI 的方案&#xf…

Q1季度电饭煲家电行业线上市场(京东天猫淘宝)销售数据排行榜

鲸参谋监测的2024年Q1季度线上电商平台(天猫淘宝京东)电饭煲家电销售数据已出炉! 今年Q1季度,电饭煲销售成绩不如预期。根据鲸参谋数据显示,今年Q1季度在线上电商平台(淘宝天猫京东)电饭煲销量…

2023年上半年信息系统项目管理师——综合知识真题与答案解释(3)

2023年上半年信息系统项目管理师 ——综合知识真题与答案解释(3) 目录 零、时光宝盒 一、试题(接上篇) 51、订立项目分包合同需满足以下(51)条件 52、在以下干系人参与度矩阵中,需要授权管理职责并引导其积极参与…