← [ BACK_TO_NOTES ]

Stream

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

#concept #evergreen #backend #nodejs #javascript

[!info] related notes

Stream

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

一句话定义

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

核心机制 / 工作原理

它最重要的价值有两个:

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

常见类型

  • Readable
  • Writable
  • Duplex
  • Transform

背压

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

这就是背压问题。

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

最小例子 / 最小场景

下载大文件时,比起:

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/7/15
Digital Biome
Access

键盘导航

j / k / ↑ / ↓
选择对象
Enter / o
打开选择
/ 或 Ctrl+K
全站搜索
i / f / 1–4
筛选当前列表
g → h / l / p / t / a
首页 / 笔记 / 项目 / 工具 / About
r → 1–9
打开所选对象的关联
u
返回上一页
Esc
关闭浮层 / 取消命令;输入框内清空文本