Java Fork/Join 应用
来源:互联网 发布:大都会 友邦 知乎 编辑:程序博客网 时间:2024/04/29 04:40
本文简要阐述一下 Java Fork/Join Framework并行编程框架,无意班门弄斧,旨在小作笔记。
背景
近些年,多核处理器计算机的普及,并行编程越来越成为一种趋势。学会并行思考,编写高效率的代码,总是深深的诱惑着我。也许大多数人都跟我怀有同样的想法,而且,Java也预测到并行编程的魅力,于是,提供了Fork/Join 这种以清晰、高效、简单、可伸缩地利用多核处理器的强大工具。
Fork/Join通过两种方式增强多线程编程:
Fork/Join Framework 简化了多线程的创建和使用;
Fork/Join Framework自动使用多处理器
在传统 的多线程编程中,大多数计算机只有一个CPU,多线程主要利用空闲时间;当有多个CPU时,使用两个或多个CPU,可以同时执行程序的各个部分,每一部分在自己的CPU上运行,从而可以显著提升某些操作的执行速度,例如排序、变换或搜素大型数组。
主要的 Fork/Join 类
ForkJoinTask<V>: 用来定义任务的抽象
ForkJoinPool: 管理ForkJoinTasks的执行
RecursiveAction: ForkJoinTask<V>的子类,用于不反回值的任务
RecursiveTask<V>: ForkJoinTask<V>的子类,用于不反回值的任务
下面是它们之间的关系:
ForkJoinPool管理ForkJoinTask的执行,ForkJoinTask是抽象类,另外两个抽象类——RecursiveAction和RecursiveTask进行了扩展。通常代码会扩展这些类以创建任务。
分而治之策略
分而治之的策略基于如下机制:将任务递归划分成更小的子任务,知道子任务足够小,从而能被联系的处理为止。例如,对于包含N个整数的数组,转换数组中每个元素的任务可以划分成两个子任务,每个子任务处理数组中一半的元素。也就是说,一个子任务转成0到N/2的元素,另一个子任务转换N/2到N的元素,每个子任务又可以一次被划分为另外一组子任务,每个子任务转换剩余元素的一半,这种划分数组的过程一直持续下去。直到达到某个临界点为止,在该临界点,连续的解决方案比进行另一次划分更快。
分而治之的优势在于处理过程可以并行发生。这也是ForkJoinTask背后的主要思想。
看官别走,接下来的文章将会举个小例子。
- Java Fork/Join 应用
- Fork/Join的应用
- JAVA 7 Fork join
- java Fork-join框架
- java fork/join
- Java Fork/join框架
- JAVA Fork/Join 框架
- java Fork/join 初探
- java fork/join
- Java Fork Join 框架
- Java Fork/Join框架
- Java 理论与实践: 应用 fork-join 框架
- Java 理论与实践: 应用 fork-join 框架
- Java 理论与实践: 应用 fork-join 框架
- Java 理论与实践: 应用 fork-join 框架
- Java 理论与实践: 应用 fork-join 框架
- Java 理论与实践: 应用 fork-join 框架
- Java 理论与实践: 应用 fork-join 框架
- php 页面静态化 原理
- hdu 3001 Travelling(模拟三进制状态压缩)
- hdu1023(catalan问题)
- RTP 打包H264
- Codeforces Beta Round #92 (Div. 2) / 124A The number of positions (简单数学)
- Java Fork/Join 应用
- 题目1515:打印1到最大的N位数
- 快速排序(双边调换)
- QT仿QQ音乐界面
- deodex Android手机ROM
- structs 8-22
- 谈谈索引文件
- JAVA EE 之 jdbc调用oracle存储过程实现
- H.264视频RTP负载格式