ForkJoinTask明确指出“ 可细分任务也不应该执行阻塞 I/O ”。它的主要目标是“计算纯函数或对纯孤立对象进行操作的计算任务”。我的问题是:-
- 为什么要设计 ForkJoinTask 来限制阻塞 IO 任务?
- 如果我确实实现了阻塞 IO 任务,有什么问题?
- 为什么 spring 和play框架都充满了使用 fork-join 执行器进行 DB 调用的示例?
在我的场景中,单个请求执行两种类型的工作,其中一种是加密,它将 CPU 核心推到 100% 持续 200 毫秒,其次是很少的数据库调用。任何类型的静态分区,例如用于加密的 6 个线程和用于阻塞 IO 的 2 个线程,都不会提供 CPU 的最佳使用率。因此,拥有一个 fork-join 执行器,在线程数量上超过总 CPU 计数的一定程度的过度配置,再加上工作窃取,将确保更好地使用 CPU 资源。
我对 forkjoin executor 的上述假设和理解是否正确,如果不正确,请指出我的差距。