gpt4 book ai didi

java - 通过链式操作快速降低流吞吐量?

转载 作者:搜寻专家 更新时间:2023-10-31 19:36:37 24 4
gpt4 key购买 nike

我希望简单的中间流操作(例如 limit())的开销很小。但是这些示例之间的吞吐量差异实际上是显着的:

final long MAX = 5_000_000_000L;

LongStream.rangeClosed(0, MAX)
.count();
// throughput: 1.7 bn values/second


LongStream.rangeClosed(0, MAX)
.limit(MAX)
.count();
// throughput: 780m values/second

LongStream.rangeClosed(0, MAX)
.limit(MAX)
.limit(MAX)
.count();
// throughput: 130m values/second

LongStream.rangeClosed(0, MAX)
.limit(MAX)
.limit(MAX)
.limit(MAX)
.count();
// throughput: 65m values/second

我很好奇:吞吐量迅速下降的原因是什么?它与链式流操作或我的测试设置是否一致? (到目前为止我还没有使用 JMH,只是用秒表设置了一个快速实验)

最佳答案

limit 将导致slice 由流组成,带有拆分迭代器(用于并行操作)。一言以蔽之:效率低下。这里的空操作的开销很大。两次连续的 limit 调用导致两个切片是一种耻辱。

您应该看一下 IntStream.limit 的实现。

由于 Streams 相对较新,优化应该排在最后;当生产代码存在时。做 limit 3 次似乎有点牵强。

关于java - 通过链式操作快速降低流吞吐量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52646345/

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