java并发编程实战-构建高效的并行计算
来源:互联网 发布:文明6金钱修改器 mac 编辑:程序博客网 时间:2024/05/22 00:48
构建高效的并行计算
1,在程序开发中我们经常会对异构的任务进行并行化处理,例如一个线程负责数据下载,另一个线程响应ui操作
2,但是有时候多个异构的任务并行并不能保证程序的效率,例如数据下载需要1秒,数据计算需要10秒,那么将这两个任务并行处理也只能提高9%的效率
3,只有当大量相互独立且同构的任务可以并行处理时,才能体现出将程序的工作负载分配到多个任务中带来的真正性能提升
示例代码如下
public abstract class ComputeSample<IN, OUT, DATA> {/** * 可缓存的线程池, * 如果线程池的当前规模超过了处理需求时,那么将回收空闲的线程, * 当需求增加是,则可以添加性的线程, * 线程池的规模不存在任何的限制 */private final ExecutorService executor = Executors.newCachedThreadPool();public void compute(IN param) {final List<DATA> datas = scanForData(param);// 通过executor管理线程池,// 通过submit提交任务Callable,// 通过BlockingQueue管理计算完成的结果CompletionService<OUT> completionService = new ExecutorCompletionService<OUT>(executor);for (final DATA data : datas){ completionService.submit(new Callable<OUT>() { public OUT call() { return doCompute(data); } });}try { for (int t = 0, n = datas.size(); t < n; t++) { // take和poll方法是委托给了BlockingQueue的 Future<OUT> f = completionService.take(); // 获得各个计算结果 OUT imageData = f.get(); doSomething(imageData); } } catch (InterruptedException e) { Thread.currentThread().interrupt(); } catch (ExecutionException e) { throw launderThrowable(e.getCause()); }}// 构建计算参数abstract List<DATA> scanForData(IN param);// 耗时的计算过程abstract OUT doCompute(DATA param);// 计算结果处理abstract void doSomething(OUT param);}
阅读全文
0 0
- java并发编程实战-构建高效的并行计算
- java并发编程实战-构建高效且可伸缩的结果缓存
- java并发编程实践学习(5)构建块为计算结果建立高效,可伸缩的高速缓存
- java并发编程实战-构建自定义的同步工具
- Java并发编程实战:并发基础构建模块
- Java 并发编程实战学习笔记——寻找可强化的并行性
- Java 并发编程实战学习笔记——路径查找类型并行任务的终止
- 设计高效的线程安全的缓存(java并发编程实战5.6)
- Java并发编程之为计算结果建立高效、可伸缩的高速缓存
- 《java并发编程实战》基础构建模块(一)
- 《java并发编程实战》基础构建模块(二)
- 《java并发编程实战》基础构建模块(三)
- 《java并发编程实战》基础构建模块(四)
- 《java并发编程实战》基础构建模块(五)
- 《java并发编程实战》基础构建模块(六)
- 《java并发编程实战》基础构建模块(七)
- Java并发编程实战笔记(四):基础构建模块
- java并发编程实战学习(3)--基础构建模块
- 基于EasyDarwin流媒体云平台的智能视频监控系统框架
- iOS获取ipa素材、提取ipa资源图片文件
- 首个重复字符
- task_struct
- 杂题(1)
- java并发编程实战-构建高效的并行计算
- SDUT 1149 计算题
- head标签里都有什么【2017.7.9】
- Python的函数、模块、包和库
- C语言数组与指针
- Ant 打包
- python学习(9)——函数式编程
- java之开发模式
- Lua初探笔记(一)