Java7 Fork-Join 框架:任务切分,并行处理
来源:互联网 发布:网络广告发布软件 编辑:程序博客网 时间:2024/05/21 22:55
概要
现代的计算机已经向多CPU方向发展,即使是普通的PC,甚至现在的智能手机、多核处理器已被广泛应用。在未来,处理器的核心数将会发展的越来越多。
虽然硬件上的多核CPU已经十分成熟,但是很多应用程序并未这种多核CPU做好准备,因此并不能很好地利用多核CPU的性能优势。
为了充分利用多CPU、多核CPU的性能优势,级软基软件系统应该可以充分“挖掘”每个CPU的计算能力,决不能让某个CPU处于“空闲”状态。为此,可以考虑把一个任务拆分成多个“小任务”,把多个"小任务"放到多个处理器核心上并行执行。当多个“小任务”执行完成之后,再将这些执行结果合并起来即可。
Java在JDK7之后加入了并行计算的框架Fork/Join,可以解决我们系统中大数据计算的性能问题。Fork/Join采用的是分治法,Fork是将一个大任务拆分成若干个子任务,子任务分别去计算,而Join是获取到子任务的计算结果,然后合并,这个是递归的过程。子任务被分配到不同的核上执行时,效率最高。伪代码如下:
Fork/Join框架的核心类是ForkJoinPool,它能够接收一个ForkJoinTask,并得到计算结果。ForkJoinTask有两个子类,RecursiveTask(有返回值)和RecursiveAction(无返回结果),我们自己定义任务时,只需选择这两个类继承即可
示例代码
上面的代码是一个100个整数累加的任务,切分到小于20个数的时候直接进行累加,不再切分。
我们通过调整阈值(THRESHOLD),可以发现耗时是不一样的。实际应用中,如果需要分割的任务大小是固定的,可以经过测试,得到最佳阈值;如果大小不是固定的,就需要设计一个可伸缩的算法,来动态计算出阈值。如果子任务很多,效率并不一定会高。
PS:类似的这种“分而治之”的需求场景,往往带有递归性,实际中,我们可以考虑任务是否具有“递归性”来决定是否使用“Fork-Join”框架。
阅读全文
0 0
- Java7 Fork-Join 框架:任务切分,并行处理
- Java7 Fork-Join 框架:任务切分,并行处理
- Java7 Fork-Join 框架:任务切分,并行处理
- java7并行计算框架Fork/Join
- Java7 FORK/JOIN框架
- Java7:Fork-Join框架
- Fork/Join框架来并行执行任务
- java7 、Fork/Join 框架原理
- java7中的fork join框架
- java7中的fork/join框架
- Fork/Join并行框架
- Java使用Fork/Join框架来并行执行任务
- Java使用Fork/Join框架来并行执行任务
- Java使用Fork/Join框架来并行执行任务
- java并发 java7之fork-join框架
- 使用Java7提供的Fork/Join框架
- 使用Java7提供的Fork/Join框架
- java7 Fork/Join
- linux内存使用系列(一):free命令详解
- Spring Bean装配--Resource(获取文件的几种常用方法)
- Swift回忆录下标——subscript
- 解决java请求跨域
- idea Debug 非常卡
- Java7 Fork-Join 框架:任务切分,并行处理
- PHP进阶之数据库设计/ 第二节:选择合适的表引擎(笔记)
- 使用IBM Data Studio 管理DB2
- SpringMVC之mvc:annotation-driven
- 神经网络不胜语__M-P模型似可寻
- java enum(枚举)使用详解 + 总结
- 20170531Windows08_CopyFile
- CODEVS 1020 孪生蜘蛛
- 利用KMeans算法对图片进行分割