如何使用异步 nextAsync 调用从多个 DataStreams 中高效打印按时间顺序排序的条目?

How to Efficiently Print Chronologically Ordered Entries from Multiple DataStreams with Asynchronous nextAsync Calls?

提问人:Danish Sharma 提问时间:10/24/2023 最后编辑:Danish Sharma 更新时间:10/24/2023 访问量:28

问:

设置:我有一个类,它提供了一个检索下一个条目的函数。每个条目都由一条消息和一个时间戳组成。单个 DataStream 中的条目按时间顺序排列,但条目数未知。该函数继续返回条目,直到最终返回 false,指示数据源已耗尽。DataStreamnextAsyncnextAsync

问题描述:我有 DataStreams,我的目标是打印按时间顺序排列的条目。问题是该函数返回的 promise 有轻微的(毫秒级)延迟。重要的是,不同 DataStreams 中的条目彼此之间没有固有的时间顺序。此外,DataStreams 可能非常广泛,因此同时存储所有条目的效率很低。nnextAsync

建议的解决方案:我的想法是利用一个存储包含条目及其相应 DataStream 索引的对象,按时间戳排序。对象结构如下所示:min-priority queue

{
   message,
   timestamp,
   indexOfDataStream,
}

我的方法涉及使用一个 while 循环,该循环一直持续到优先级队列为空。在每次迭代中,我检索并打印具有最小时间戳的条目,并使用 indexOfDataStream 获取该 DataStream 的下一个条目,随后将其推回优先级队列。await nextAsync

虽然我提出的解决方案会同步所有调用,但我对优化代码以加快执行速度感兴趣。是否有任何技术或方法可以提高此过程的运行时效率?

JavaScript 异步 承诺

评论

0赞 Bergi 10/24/2023
看一看 如何交错/合并异步迭代对象? 这应该可以完全解决您的问题
0赞 Bergi 10/24/2023
我认为你的方法有缺陷。“使用一直持续到优先级队列为空的 while 循环”不会立即返回,因为队列在异步获取第一个条目时是空的吗?而且它可能随时变空——事实上,我希望它大部分时间都是空的。

答: 暂无答案