跳到主要内容

流和背压机制

Node.js 中的流是一种处理数据的抽象接口。流可以是可读的、可写的或双工的(既可读又可写)。流的主要类型包括:

  • Readable Stream(可读流):用于从数据源读取数据。例如,fs.createReadStream() 用于从文件中读取数据。

  • Writable Stream(可写流):用于将数据写入目标。例如,fs.createWriteStream() 用于将数据写入文件。

  • Duplex Stream(双工流):同时实现了可读和可写接口。例如,网络套接字。

  • Transform Stream(转换流):一种双工流,在写入和读取数据时可以修改或转换数据。例如,zlib.createGzip() 用于压缩数据。

背压(Backpressure)

背压是指在处理流数据时,数据生产者的速度超过了数据消费者的处理能力,从而导致数据积压的现象。Node.js 提供了一种机制来处理这种情况,以防止内存溢出或应用程序崩溃。

背压处理机制

暂停和恢复流:可读流可以通过 stream.pause() 和 stream.resume() 方法来手动控制流的流动。

管道(Pipe)机制

Node.js 提供了 stream.pipe() 方法,可以自动处理背压。它会根据可写流的 drain 事件来暂停和恢复可读流。

highWaterMark 参数

在创建流时,可以通过设置 highWaterMark 参数来控制缓冲区的大小,从而影响背压的触发点。

通过合理使用流和背压机制,Node.js 应用程序可以高效地处理大规模数据传输,而不会因为内存问题而崩溃。