节点:pipe道输出到标准输出泄漏内存

在MacOS 10.12.6的节点v8.9.1中:

下面的最小脚本创build一个Readablestream,产生无限的string“yes”。 然后通过pipe道stdoutstdout 。 据我所知,它是根据编写自定义Readablestream的指导原则编写的。 特别是,当push()返回false时,它停止产生数据。

然而,当我从terminal运行它时,这个进程的内存使用量将会无限膨胀,非常快,达到2GB。 这似乎表明stdoutstream中的某种无限累积。

任何人都可以诊断,并解释幕后发生了什么?

 var stream = require("stream"); var yesStream = new stream.Readable({ read: function(length) { while (yesStream.push("yes\n")) {} } }); yesStream.pipe(process.stdout);