当前位置: 首页 > news >正文

济宁做网站多少钱网站制作是不是要先用ps做

济宁做网站多少钱,网站制作是不是要先用ps做,网站建设感想,主题森林wordpress⚡ Netty 源码扩展篇:零拷贝、内存池与背压机制在前面几篇里,我们解析了 Netty 的 Pipeline 与 EventLoop 源码。 今天我们继续深入,拆解 Netty 高性能的三大“杀手锏”: 零拷贝(Zero-Copy)内存池&#xff…

⚡ Netty 源码扩展篇:零拷贝、内存池与背压机制

在这里插入图片描述

在前面几篇里,我们解析了 Netty 的 PipelineEventLoop 源码。
今天我们继续深入,拆解 Netty 高性能的三大“杀手锏”:

  • 零拷贝(Zero-Copy)
  • 内存池(ByteBuf Pool)
  • 背压机制(WriteBack Pressure)

这三个优化,直接决定了 Netty 在海量连接和高吞吐场景下的表现。


一、零拷贝(Zero-Copy)

1. 什么是零拷贝?

传统 Java IO:

  • 数据需要在 内核空间 ↔ 用户空间 之间来回拷贝。
  • 大文件传输(比如下载、视频流)时效率极低。

Netty 利用零拷贝技术,减少不必要的数据拷贝。


2. Netty 的零拷贝手段

主要体现在 ByteBufFileRegion 两个地方。

(1) ByteBuf.slice()
ByteBuf buf = Unpooled.buffer(1024);
ByteBuf slice = buf.slice(0, 512);

👉 slicebuf 共享同一段内存,只是读写指针不同。
📌 避免了数据的重新拷贝。


(2) CompositeByteBuf
CompositeByteBuf compositeBuf = Unpooled.compositeBuffer();
compositeBuf.addComponents(buf1, buf2);

👉 多个 ByteBuf 逻辑拼接,但物理内存不拷贝。
📌 避免了字符串拼接、数组复制的开销。


(3) FileRegion(零拷贝传输)

Netty 在大文件传输中调用 FileRegion

File file = new File("test.zip");
FileChannel fileChannel = new FileInputStream(file).getChannel();
DefaultFileRegion region = new DefaultFileRegion(fileChannel, 0, file.length());
ctx.writeAndFlush(region);

📌 内核 sendfile 机制,数据直接从内核缓冲区到网卡,无需用户空间拷贝。


3. 零拷贝机制图解

传统IO
用户态拷贝
内核态拷贝
网卡发送
Netty 零拷贝
内核态直接传输

二、内存池(ByteBuf Pool)

1. 为什么需要内存池?

  • 高并发场景下频繁创建/销毁 ByteBuffer → GC 压力巨大。
  • 内存碎片严重,影响性能。

Netty 引入 池化的 ByteBuf,复用内存块,降低 GC。


2. PooledByteBufAllocator

Netty 默认使用 PooledByteBufAllocator

ByteBufAllocator allocator = PooledByteBufAllocator.DEFAULT;
ByteBuf buf = allocator.buffer(256);

📌 优点:

  • 内存分配走池化策略。
  • 避免频繁 new,减少 GC。
  • 支持 直接内存(Direct Memory),绕过 JVM 堆。

3. 内存池分配原理

Netty 内存池采用 分级分配策略

  • Tiny:小对象(< 512B)。
  • Small:中等对象(< 8KB)。
  • Normal:大对象(>= 8KB)。
  • Huge:超大对象。

分配逻辑类似于 内存页管理


4. 内存池工作原理图

ByteBufAllocator
Tiny
Small
Normal
Huge

👉 这样不同大小的内存走不同分配策略,避免浪费和碎片化。


在这里插入图片描述

三、背压机制(WriteBack Pressure)

1. 什么是背压?

写入速度 > 网络发送速度 时,写缓冲区会撑爆,内存耗尽。
背压机制就是:让生产者减速,防止 OOM。


2. Netty 的背压实现

Netty 在 ChannelOutboundBuffer 中维护写队列。

核心代码:

public void write(Object msg) {// 超过高水位线,触发背压if (totalPendingWriteBytes > highWaterMark) {setUnwritable();}
}

📌 两个参数:

  • 高水位线(highWaterMark):超过后标记 isWritable = false
  • 低水位线(lowWaterMark):降到低于该值时恢复可写。

3. 应用层如何感知?

channel.isWritable()
  • false → 说明写缓冲区爆了,应暂停写入。
  • 等待可写事件恢复后再继续发送。

4. 背压机制图解

> HighWaterMark
< LowWaterMark
应用层写数据
ChannelOutboundBuffer
不可写 isWritable=false
应用暂停写入
恢复可写 isWritable=true

四、总结

  • 零拷贝:减少内存拷贝,提升大文件/数据传输效率。
  • 内存池:ByteBuf 池化,减少 GC,提升内存利用率。
  • 背压机制:通过水位线控制写入速度,防止 OOM。

这三大机制,是 Netty 在高并发场景下能保持 稳定高性能 的关键。


👉 下一篇,我们可以写 Netty 应用调优篇,结合参数配置和监控指标,讲解如何在生产环境下跑得又稳又快。


在这里插入图片描述

http://www.dtcms.com/a/485700.html

相关文章:

  • 做视频网站审核编辑有假么网站备案名可以更改吗
  • 百度快照官网登录寿光网站优化
  • 阜宁做网站哪家公司好怎么样免费创建网站
  • 山东住房和城乡建设部网站四川省工程造价总站官网
  • 建筑类专业做教育的网站专业网站建设网站推广
  • 制作微信网站模板下载不了成都网站建设收费
  • 柳州专业网站优化股市行情app
  • 长沙建个网站要多少钱拉丝机东莞网站建设
  • c 做网站需要什么知识三大电商平台
  • 做旅游网站的目的网站建设 猴王网络0成本
  • 做水暖的网站整站seo排名费用价格
  • 网上商城网站开发报告电商网页设计理念
  • 装修公司 网站模板dede本地搭建好网站后台密码和用户名是什么
  • 黑龙江建设局网站怎样做当当网站代理
  • 网站icp备案申请网站建立健全举报工作机制
  • 响应式网站方案望野原文翻译
  • 网站建站建设网站网站主机英文
  • 企业网站建设进什么科目核算百度调整导致网站排名下降
  • 英文网站建设cms有网站吗给一个
  • 网站建设实训课指导书网站版式分析云主机多个网站
  • 唐山的网站建设工程168信息平台
  • 百度快照和做网站有关系吗一个超链接 多个网站
  • 哈尔滨做网站找哪家好时空seo助手
  • 哪里有学做ppt的网站星月教你做网站
  • .电子商务网站建设的核心网站的首页设计方案
  • 济南住宅与房地产信息网官方网站好姑娘中文在线观看国语高清免费
  • 网站改标题班级网站怎样做
  • 服务机构电子商务网站有哪些网站开发需求表
  • 古董手表网站做网站营销公司有哪些
  • 广州 电商网站建设求一个好用的网站