讲师中心 微信公众号
AI工具推荐 视频效率加速

JVM中通过NIO的Pipe管道实现同一JVM内两个独立线程极速数据单向传输的原理

秋磊小哥_6728

秋磊小哥_6728

发布时间:2026-06-07 06:34:49

|

325人浏览过

|

来源于php中文网

原创

Java NIO Pipe通过内核级环形缓冲区实现线程间零拷贝单向传输,非阻塞模式下延迟极低,但缓冲区固定约8 KiB、无背压机制且不支持Selector注册。

jvm中通过nio的pipe管道实现同一jvm内两个独立线程极速数据单向传输的原理

Java NIO 的 Pipe 在同一 JVM 内实现两个线程间极速单向数据传输,核心在于它复用了操作系统内核级的管道机制(如 Unix domain pipe),全程不经过堆外拷贝、不依赖锁、不触发 GC 频繁分配,数据从写线程的 ByteBuffer 直达读线程可读位置,延迟极低。

底层是内核环形缓冲区,零用户态拷贝

Pipe.open() 实际在内核中创建了一个固定大小(OpenJDK 默认约 8 KiB)的匿名管道,SinkChannel 和 SourceChannel 共享同一段内核内存。写入时,JVM 将 ByteBuffer 中的数据通过系统调用(如 write())送入该缓冲区;读取时,再通过 read() 直接从该缓冲区拉取——整个过程不经过 JVM 堆内存中转,也无需序列化或对象封装。

  • 数据流路径:写线程 ByteBuffer → 内核管道缓冲区 → 读线程 ByteBuffer(无中间复制)
  • 没有 Socket 的协议解析开销,也没有文件 I/O 的磁盘寻址延迟
  • 相比 BlockingQueue<bytebuffer></bytebuffer>,省去了队列加锁、节点对象创建、GC 压力等环节

非阻塞 + 显式状态管理,避免线程挂起

默认阻塞模式下,Pipe 会因缓冲区满/空导致线程卡死,完全丧失“极速”特性。真正发挥性能的前提是两端均设为非阻塞:

  • sink.configureBlocking(false):write() 立即返回,返回值即实际写入字节数;为 0 表示缓冲区满,需稍后重试,而非等待
  • source.configureBlocking(false):read() 同样立即返回,-1 表示管道已关闭,0 表示暂无数据,不阻塞
  • 配合 buffer.flip() / buffer.clear() 精确控制读写边界,避免因 buffer 状态错乱导致读不到数据

线程安全且无锁,天然适配生产者-消费者模型

Pipe 的 SinkChannel 和 SourceChannel 是 JDK 内部保证线程安全的通道,其 write/read 操作由内核原子保障,应用层无需额外同步:

  • 多个写线程可并发调用同一 SinkChannel.write(),数据按写入顺序串行进入管道
  • 单一读线程从 SourceChannel 读取,天然形成“多对一”的生产者-消费者结构
  • 无 synchronized、无 CAS 自旋、无 AQS 队列,规避了锁竞争和上下文切换开销

限制与适用边界:快,但不是万能高速路

Pipe 的“极速”体现在低延迟、小数据、短链路场景,但它有明确瓶颈:

  • 缓冲区大小不可配置(固定 ~8 KiB),大消息需分片,频繁小包易引发过多系统调用
  • 无背压反馈机制,写入过快会导致 write() 持续返回 0,需应用层主动退让(如 Thread.yield() 或交由 Selector 调度)
  • SourceChannel 和 SinkChannel 不支持注册到 Selector(会抛 UnsupportedOperationException),所谓“用 Selector 管理 Pipe”是常见误用
  • 不适合高吞吐、长连接、需动态路由或多消费者广播的场景——此时 TransferQueue 或自定义 ring buffer 更稳

热门AI工具

更多
UpDream
UpDream Hot

一款AI视频创作工具,主要用于哔哩哔哩推出的自研AI视频创作工具,适合需要提升相关任务效率的用户。

WorkBuddy

一款AI办公效率工具,主要用于腾讯云推出的AI原生桌面智能体工作台,适合需要提升相关任务效率的用户。

立刻MV
立刻MV Hot

立刻MV是一款AI文本写作工具,AI 音乐视频(MV)创作工具。

VibeKnow
VibeKnow Hot

一款AI视频创作工具,主要用于全球首个AI知识视频创作平台,文档、文章、网页,一键生成视频,适合需要提升相关任务效率的用户。

AionClaw
AionClaw Hot

AionClaw是一款面向办公、创作和编程任务的AI桌面智能体。

豆包大模型

豆包大模型是一款由字节跳动推出的企业级大语言模型服务平台。

PixTV
PixTV Hot

PixTV是一款面向AIGC内容创作的AI视频生成工具。

DeepSeek

DeepSeek是一款面向对话、写作、编程和推理场景的AI大模型工具。

Seko
Seko Hot

一款AI视频创作工具,主要用于商汤科技推出的创编一体的AI短视频创作Agent,适合需要提升相关任务效率的用户。

相关专题

更多
pip安装使用方法
pip安装使用方法

安装步骤:1、确保Python已经正确安装在您的计算机上;2、下载“get-pip.py”脚本;3、按下Win + R键,然后输入cmd并按下Enter键来打开命令行窗口;4、在命令行窗口中,使用cd命令切换到“get-pip.py”所在的目录;5、执行安装命令;6、验证安装结果即可。大家可以访问本专题下的文章,了解pip安装使用方法的更多内容。

2750

2023.10.09

更新pip版本
更新pip版本

更新pip版本方法有使用pip自身更新、使用操作系统自带的包管理工具、使用python包管理工具、手动安装最新版本。想了解更多相关的内容,请阅读专题下面的文章。

6303

2024.12.20

pip设置清华源
pip设置清华源

设置方法:1、打开终端或命令提示符窗口;2、运行“touch ~/.pip/pip.conf”命令创建一个名为pip的配置文件;3、打开pip.conf文件,然后添加“[global];index-url = https://pypi.tuna.tsinghua.edu.cn/simple”内容,这将把pip的镜像源设置为清华大学的镜像源;4、保存并关闭文件即可。

7902

2024.12.23

python升级pip
python升级pip

本专题整合了python升级pip相关教程,阅读下面的文章了解更多详细内容。

3907

2025.07.23

Java I/O 与 NIO 编程体系合集
Java I/O 与 NIO 编程体系合集

全面讲解 Java I/O 编程的演进与核心 API,涵盖传统 I/O 的字节流(InputStream/OutputStream)与字符流(Reader/Writer)体系、装饰器模式在 I/O 中的应用(BufferedReader/InputStreamReader)、文件读写与目录操作、NIO 核心三要素(Buffer 缓冲区/Channel 通道/Selector 选择器)、ByteBuffer 操作与内存映射文件(Mappe

372

2026.04.29

线程和进程的区别
线程和进程的区别

线程和进程的区别:线程是进程的一部分,用于实现并发和并行操作,而线程共享进程的资源,通信更方便快捷,切换开销较小。本专题为大家提供线程和进程区别相关的各种文章、以及下载和课程。

3878

2023.08.10

FrankenPHP集成Laravel详细教程
FrankenPHP集成Laravel详细教程

本专题提供FrankenPHP集成Laravel的详细配置指南,全面解析运行原理、开发环境搭建、Caddyfile配置、Octane工作模式、数据库连接、队列任务、定时任务和生产环境优化,解决部署过程中常见的报错与兼容性问题。

0

2026.10.08

LLVM自定义Pass怎么写
LLVM自定义Pass怎么写

本专题聚焦LLVM自定义Pass开发,整理Pass类结构、run()方法、PreservedAnalyses、CMake构建、插件注册、-load-pass-plugin加载和测试用例编写流程。

120

2026.09.30

LLVM RISC-V参数配置教程
LLVM RISC-V参数配置教程

本专题介绍LLVM对RISC-V基础ISA和扩展的支持方式,涵盖RV32、RV64、标准扩展、实验性扩展、厂商扩展、-menable-experimental-extensions和版本差异。

100

2026.09.30

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn