我正在尝试使用nodejs流,但在我看来遇到了一些奇怪的事情。
const {
Writable,
Readable
} = require('stream');
const myWritable = new Writable({
write(chunk, encoding, callback) {
callback()
},
});
const myReadable = new Readable({
read() {
this.push(Buffer.from([1, 2, 3, 4, 5, 6]))
}
});
myReadable.pipe(myWritable);
此看似无害的代码会导致线性内存增加,并且10秒钟后,该过程将因内存不足错误而停止。
FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory
尽管这段代码并不是很有意义,但我仍然不明白为什么它占用了如此多的内存。我认为,它应该只是从可读流中创建缓冲区,将其通过管道写入可写内容,然后将所有内容进行垃圾收集。
const {
Readable
} = require('stream');
const myWritable = require('fs').createWriteStream('/dev/null')
const myReadable = new Readable({
read() {
this.push(Buffer.from([1, 2, 3, 4, 5, 6]))
}
});
myReadable.pipe(myWritable);
在这种情况下,写入实际上使用了文件系统,该过程运行得很好,而没有显着占用内存。
那么,关于幕后发生的事情有什么想法吗?