对于简单的问题,我找不到简明的答案。希望是这样。

我只是想这样做:

let myReadableStream = ...some readable stream...;
let myFileStream = ...some writable file stream...;

myReadableStream.pipe(process.stdout).pipe(myFileStream);


这无法正常工作,因为无法通过管道传输可写流。

这类作品:

let myReadableStream = ...some readable stream...;
let myFileStream = ...some writable file stream...;

myReadableStream.pipe(process.stdout);
myReadableStream.pipe(myFileStream);


但是,如果可读管道在到达第二个myReadableStream.pipe(myFileStream)之前就迅速填充了数据,这不会引起问题吗?

用管道执行此操作的规范方法是什么?

最佳答案

据我了解,node.js流在调用pipe()函数时不会立即开始流动,因此工作会推迟到您将控制权返回给event loop上。因此,不会,在两个pipe()调用之间什么也不会发生。

我知道这对于来自基于多个应用程序线程的环境的人(如我)来说似乎违反直觉。但是多线程不是并发的JavaScript模型。相反,异步JavaScript执行基于易于管理的EventLoop模型,其中异步回调处理仅在其他应用程序代码处于空闲状态时发生。这样做的最大好处是不需要锁,有时在线程执行模型中很难做到这一点。

08-05 21:41
查看更多