繁体   English   中英

ForkJoin 与 Java 中的其他线程池?

[英]ForkJoin vs other thread pools in Java?

Java ForkJoin 池已多次与 Java 中的其他“经典”线程池实现进行比较。 不过,我的问题略有不同:

我可以为具有两种类型的线程使用的应用程序使用单个共享 ForkJoin 池 - 长时间运行、套接字处理、事务性线程和短期运行任务 (CompletableFuture)? 或者我是否必须经历为每种类型的需求维护 2 个独立池的痛苦? ... 换句话说,如果在其他 Java 线程池实现就足够的地方使用 ForkJoin,是否会有显着的(性能?)损失?

根据文档,这取决于:

(3) 除非使用 ForkJoinPool.ManagedBlocker API,或者已知可能被阻塞的任务数小于池的 ForkJoinPool.getParallelism() 级别,池不能保证有足够的线程可用以确保进度或良好的性能.

并行性与可用 CPU 内核的数量相关。 因此,如果有足够的 CPU 内核并且没有很多阻塞的 I/O 任务,您可以使用commonPool 但这并不意味着你应该这样做。 一方面, ForkJoinPool明确不是为长时间运行(阻塞)任务而设计的。 另一方面,您可能希望在关机期间对长时间运行(阻塞)的任务执行某些操作。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM