Stream

Stream 是分块处理数据的抽象,常用于文件、网络和管道式处理,并通过背压机制避免一次性把大数据全部压进内存。

#type / concept #status / evergreen #tech / dev / backend #resource / nodejs #resource / javascript

[!info] related notes

Stream

Stream 是按块处理数据的抽象,适合大文件、网络传输和流式消费场景。

一句话定义

Stream 不是“一次把完整数据拿到手再处理”,而是把数据拆成很多块,在读取、转换和写出过程中边流动边处理。

核心机制 / 工作原理

它最重要的价值有两个:

  • 避免把大文件或大响应一次性全读进内存
  • 通过背压让生产速度和消费速度保持平衡

常见类型

  • Readable
  • Writable
  • Duplex
  • Transform

背压

如果写入端来不及消费,读取端就不该继续无节制地灌数据。

这就是背压问题。

在 Node.js 里,pipepipeline 的价值之一就是帮你处理这类协调。

最小例子 / 最小场景

下载大文件时,比起:

const data = await fs.promises.readFile('./large.mp4');
res.send(data);

更稳的是:

import fs from 'node:fs';

const stream = fs.createReadStream('./large.mp4');
stream.pipe(res);

边界与易混淆点

Stream 不等于更快的 CPU 计算

它主要优化的是内存占用和 I/O 处理方式,不是把 CPU 密集任务自动并行化。

什么时候更推荐 pipeline

如果链路里有多个流,且你希望统一错误处理和关闭资源,通常比裸 pipe 更稳。

相关笔记

创建于 2026/4/9 更新于 2026/5/27