feng xiaohan

treams&BuffersS

Streams(数据流)

从浏览器发送的数据是作为数据流(stream)传递的。

数据流是 JS 中一种特殊的概念,JavaScript 自身不具备直接操作二进制文件的能力,所以实质上 Buffer 在 nodejs 底层上还有一个 C++模块。这是因为 IO 操作是非常消耗性能的,所以 nodejs 在 Buffer 模块构建设计上,将性能部分用 C++实现,将非性能部分用 JavaScript 实现。

例如:接收浏览器请求

数据流(stream)是一个持续的过程。浏览器请求被 Node.js 分为多个块(chunks)的形式读取,最后在某个事件完成整个请求的读取;而单个块并不需要等到完整请求被读取后执行,这就需要缓冲区(buffers)来实现:

Buffers(缓冲区)

通常,数据的移动是为了处理或者读取它,并根据它进行决策。伴随着时间的推移,每一个过程都会有一个最小或最大数据量。如果数据到达的速度比进程消耗的速度快,那么少数早到达的数据会处于等待区(缓冲区)等候被处理。

缓冲区就像一个公共汽车站,公共汽车(数据流)总是在行驶,需要乘坐或离开这个汽车的人(请求块)需要在公共汽车站(缓冲区)等待公共汽车。