节点:pipe道输出到标准输出泄漏内存
在MacOS 10.12.6的节点v8.9.1中:
下面的最小脚本创build一个Readable
stream,产生无限的string“yes”。 然后通过pipe道stdout
到stdout
。 据我所知,它是根据编写自定义Readable
stream的指导原则编写的。 特别是,当push()
返回false
时,它停止产生数据。
然而,当我从terminal运行它时,这个进程的内存使用量将会无限膨胀,非常快,达到2GB。 这似乎表明stdout
stream中的某种无限累积。
任何人都可以诊断,并解释幕后发生了什么?
var stream = require("stream"); var yesStream = new stream.Readable({ read: function(length) { while (yesStream.push("yes\n")) {} } }); yesStream.pipe(process.stdout);