Fork/Join
oracle Fork/Join 部分文档:
work-stealing algorithm
Worker threads that run out of things to do can steal tasks from other threads that are still busy.
The center of the fork/join framework is the ForkJoinPool
class, an extension of the AbstractExecutorService
class. ForkJoinPool
implements the core work-stealing algorithm and can execute ForkJoinTask
processes.
Basic Use
The first step for using the fork/join framework is to write code that performs a segment of the work. Your code should look similar to the following pseudocode:
if (my portion of the work is small enough)
do the work directly
else
split my work into two pieces
invoke the two pieces and wait for the results
Wrap this code in a ForkJoinTask
subclass, typically using one of its more specialized types, either RecursiveTask
(which can return a result) or RecursiveAction
.
After your ForkJoinTask
subclass is ready, create the object that represents all the work to be done and pass it to the invoke()
method of a ForkJoinPool
instance.
Task划分:
1、适用于大型网络结构
2、相关性不高的情况
3、可以将网络划分后进行分治
4、只记录路径花费,每次生成新的路径花费list
5、独立维护扫描过的节点集合
6、cpu物理核数越多越好
task(){
}