gpt4 book ai didi

java - 并行流看起来不像是并行工作,完全

转载 作者:行者123 更新时间:2023-11-30 12:06:19 29 4
gpt4 key购买 nike

1。 Set 的 parallelStream 没有使用足够的线程。

Java8 parallelStream 不能完全并行工作。在我的计算机中,当任务数小于处理器数时,java8 集的 parallelStream 没有使用足够的线程。

public class ParallelStreamSplitTest {
@Test
public void setStreamParallelTest() {
System.out.printf("Total processor count : %d \n", Runtime.getRuntime().availableProcessors());
long start = System.currentTimeMillis();
IntStream.range(1, 8).boxed().collect(Collectors.toCollection(HashSet::new)).parallelStream().forEach((index) -> {
System.out.println("Starting " + Thread.currentThread().getName() + ", index=" + index + ", " + new Date());
try {
Thread.sleep(1000);
} catch (Exception e) {
}
});
long end = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + "'s elapsed time : " + (end - start));
}

@Test
public void intStreamParallelTest() {
System.out.printf("Total processor count : %d \n", Runtime.getRuntime().availableProcessors());
long start = System.currentTimeMillis();
IntStream.range(1, 8).parallel().forEach(index -> {
System.out.println("Starting " + Thread.currentThread().getName() + ", index=" + index + ", " + new Date());
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
});
long end = System.currentTimeMillis();
System.out.println(Thread.currentThread().getName() + "'s elapsed time : " + (end - start));
}
}

在我的代码中,setStreamParallelTest 需要 4 秒,而 intStreamParallelTest 需要 1 秒。

我希望 setStreamParallelTest 也能在 1 秒内完成。是错误吗?

2。在web应用中使用并行流调用另一个api可以吗?如果错了,为什么?

我的网络应用程序需要并行调用另一个 api 服务器。所以我使用并行流调用api。

Sets.newHashSet(api1, api2, api3, api4).parallelStream().forEach(api -> callApiSync(api))

我认为绑定(bind)到我的服务器的所有请求都共享一个 fork-join 池。所以,当其中一个 api 的响应缓慢时,它看起来很危险。

是否正确?

最佳答案

parallelStream 的契约(Contract)说:

Returns a possibly parallel Stream with this collection as its source. It is allowable for this method to return a sequential stream.

如果您想并行调用多个任务,请使用 ExecutorService

关于java - 并行流看起来不像是并行工作,完全,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55643655/

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