![](/img/trans.png)
[英]Difference between Spring Async, Async with CompletableFuture and Java8 parallel stream
[英]Difference between parallel stream and CompletableFuture
在“Java 8 in action”(Urma,Fusco和Mycroft)一書中,他們強調並行流在內部使用公共fork連接池,雖然這可以全局配置,例如使用System.setProperty(...),不可能為單個並行流指定值。
我已經看到了涉及在自定義ForkJoinPool中運行並行流的解決方法 。
在本書的后面,他們有一整章致力於CompletableFuture,在此期間他們有一個案例研究,他們比較使用parallelStream VS和CompletableFuture的各自表現。 事實證明它們的性能非常相似 - 它們強調了這一點的原因是它們都是默認使用相同的公共池(因此相同數量的線程)。
他們繼續展示解決方案並爭辯說CompletableFuture在這種情況下更好,因為它可以被設置為使用自定義Executor,其用戶選擇的線程池大小。 當他們更新解決方案以利用它時,性能得到顯着改善。
這讓我想到 - 如果使用上面突出顯示的解決方法為並行流版本做同樣的事情,性能優勢是否會相似,那么這兩種方法在性能方面是否會再次相似? 在這種情況下,為什么人們會選擇CompletableFuture而不是並行流,因為它顯然需要開發人員更多的工作。
在這種情況下,為什么人們會選擇CompletableFuture而不是並行流,因為它顯然需要開發人員更多的工作。
恕我直言這取決於您希望支持的界面。 如果您希望支持異步API,例如
CompletableFuture<String> downloadHttp(URL url);
在這種情況下,只有可完成的未來才有意義,因為您可能希望在等待數據下降時執行其他不相關的操作。
另一方面, parallelStream()
最適合CPU綁定任務,您希望每個任務執行某些工作的一部分。 即每個線程使用不同的數據做同樣的事情。 你的意思是它也更容易使用。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.