gpt4 book ai didi

node.js - 异步转换流不能并行工作吗?

转载 作者:太空宇宙 更新时间:2023-11-03 23:15:19 25 4
gpt4 key购买 nike

我正在从 NodeJS 中的流中读取数据,然后使用转换流中的异步函数处理该数据。我希望这个转换流并行发起对异步函数的多次调用,但它似乎一次调用一个。

为了说明我的期望,我在下面编写了一个小程序,该程序生成从 0limit - 1 的数字,然后将其传递到递增每个数字的转换流有一点延迟。如果运行下面的程序,数字 1 到 20 将按顺序记录,所有这些都有很小的延迟。

由于默认的 highWaterMark 是 16,所以我希望它们以 16 + 4 的 block 记录。是否有可能获得我想要的行为,如果可以,如何实现?

即读取流将非常快地生成数据,转换速度较慢,但​​应该接收到高水位线,然后等待其数据已处理完毕,然后从读取流中请求更多数据。

const stream = require('stream')
const limit = 20
let index = 0

const numberStream = new stream.Readable({
objectMode: true,
read (amount) {
const innerLimit = Math.min(index + amount, limit)
while (index < innerLimit) {
this.push(index++)
}
if (index === limit) {
this.push(null)
}
},
})

const delayedIncStream = new stream.Transform({
objectMode: true,
transform (item, _, cb) {
setTimeout(() => cb(null, item + 1), 100)
},
})

const resultStream = numberStream.pipe(delayedIncStream)

resultStream.on('data', console.log)

最佳答案

答案是,如文档本节最后部分所述:https://nodejs.org/api/stream.html#stream_transform_transform_chunk_encoding_callback

transform._transform() is never called in parallel; streams implement a queue mechanism, and to receive the next chunk, callback must be called, either synchronously or asynchronously.

关于node.js - 异步转换流不能并行工作吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56185587/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com