• buffer, 缓存区域
  • stream, 缓存方式
  • 生产者消费者问题/有缓冲问题, 共享固定大小缓冲区的两个进程运行中产生的问题
  • 生产者, 生成数量的数据放入缓冲区(重复此过程)
  • 消费者, 缓冲区消耗这些数据

[p2]流机制 - 图1

什么是流?

流, 数据处理方法, 用于按顺序将输入读写到输出中。
一种处理读/写文件、网络通信或任何端到端信息交换的有效方式。

优点:

  • 内存高效
  • 时间效率

背景: 比如使用fs.readFile 读/写静态文件时, 由于文件较大, 对内存消耗过大。

  1. fs.readFile
  2. // 改写
  3. fs.createReadStream

创建一个可读流,逐次读取文件内容供给下游消费,这种逐步读取和消费的方式,有效减缓了内存的消耗

流类型

可读流

image.png image.png

可写流

image.png

双工流

image.png

转换流

输入和输出是存在相互关联的,中间做了一次转换处理
应用: Gzip 压缩、解压
image.png

模式

流模式

将自动从底层系统读取数据,并通过 EventEmitter 接口使用事件将其尽快提供给程序。
事件

  • data
  • end
  • error

暂停模式

必须显式调用 stream.read() 方法以从流中读取数据块
事件

  • readable
  • end

http://nodejs.cn/api/stream.html
https://www.barretlee.com/blog/2017/06/06/dive-to-nodejs-at-stream-module/
mei上 https://tech.meituan.com/2016/07/08/stream-basics.html
https://tech.meituan.com/2016/07/15/stream-internals.html