ArchSummit全球架构师峰会门票9折倒计时中~ 了解详情
写点什么

JavaOne 2016 次日—— "并行编程思想"

  • 2016 年 10 月 07 日
  • 本文字数:1425 字

    阅读完需:约 5 分钟

JavaOne 次日,视频直播涵盖了四个会议室。这些会议的视频链接在本文末尾给出。

InfoQ 参与了会议《并行编程思想(Thinking in Parallel)》,本文主要讨论该话题(视频链接见文末)。该话题的演讲人是来自 Oracle 的 Stuart Marks 和 Brian Goetz。二人组完美的通过流 API(streams)解释了并行处理,其中 Marks 着重介绍了为什么要使用 Stream API,而 Goetz 着重介绍了为什么要使用并行化。

Marks 的演讲从一个将字符串数组转换成大写的示例开始,同时展示了常规实现和 Stream 实现。

常规实现使用一个 for 循环,内容如下:

这里输入数组从左往右顺序处理,但是主要运算逻辑仅仅是“转换成大写”,且每个字符串运算都相互独立。另外,数组中的数据可以以任何顺序处理,或者是并行处理。那么,如果使用 Stream 方式会怎样呢?

在使用 Stream 方式的示例中,输入数组被映射成大写,然后被重组成数组。输入和输出数组中的内容无需保证顺序,整个数组都被转换成大写。

Marks 声称 Stream 版本更好,因为它有更高级别的抽象、计算的独立性和聚合性。

下一个示例演示的是通过指定关键字将一个列表分割,内容如下:

Marks 指出 subList 方法参数为原始列表索引值,为了完成这个需求,算法必须在“#”处分割。为了便于理解,Marks 在“#”处放置了黑条来表示子列表的边界,然后将每个边界切分并合成创建新的子列表边界。示意图如下:

使用传统方式实现这个算法:

以上实现有一些额外的复杂度,增加了理解成本,例如:start = cur + 1;语句和在 for 循环之外调用result.add方法。对此,Marks 的观点是:

Marks 对比了 Stream 实现,重新审视问题,我们唯一关心的是索引。因此,不同于之前的 for 循环,这里通过 Stream 来检查索引。由于断言和结果分割运算相互独立,我们可以针对每个元素做断言验证,并且这些验证都可以独立计算。上面描述的结果代码(消除了数组复制而改成追加到数组之后)大致如下:

Marks 总结了他的观点:Stream 实现更加清晰。

随后,Goetz 补充了 Marks 的演讲主题,考虑了并行计算的优势和劣势。他从下面这页演示文稿开始讨论并行化,指出并行化是消耗更多资源和更快得到结果的权衡。

Goetz 强调,并行计算总是会增加更多的并行化事务,例如划分工作,管理和协调任务以及他们的结果。所以,如果计算任务能够被成功的并行化,该任务本身应该是可并行化并且有优秀的并行计算框架(例如 fork-join 库)。最后,还应该有足够的数据来并行的处理。随后,Goetz 提供了一些可以有效进行并行化的示例,并向听众展示了如何分而治之:

Goetz 强调所有的并行解决方案实质上都看起来像上面分而治之的思想:将问题划分以避免同步开销。对于一个高效的并行算法,问题应该尽早的被分割。Goetz 提供了一个示例,展示了并行的对一个数组进行求和,并给出了一些性能考量:

最后,Goetz 讨论了并行 Stream 性能。Stream 容易被并行化,但是不是所有源数据都适合并行处理。

基于数组的源数据是最佳的。

根据 Goetz 的描述,“NQ 模型”是一个简单的模型,一个用来计算并行化提速的经验法则:

Goetz 探讨了“源数据分割效率”,提到了数组由于其底层实现方式,它的分割非常均匀且低成本。另外需要记得一些管道操作会依赖数据顺序,例如“限制 10 项”操作显然是按顺序应用到前 10 项。另一个需要考虑的的是有时归并操作可能成本会很高。

Goetz 总结了整个会议主题:

相关链接:

会议室4

会议室6

Cyrill Magnin II/III

Embarcadero

查看英文原文: JavaOne 2016 - Day 2 “Thinking in Parallel”

2016 年 10 月 07 日 19:002983

评论

发布
暂无评论
发现更多内容

【深入理解TcaplusDB技术】异步扫描数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

想代理加盟自助洗车要怎么做?

车白兔自助洗车机加盟

自助洗车机价格 自助洗车加盟 车白兔自助洗车机 自助洗车代理

【深入理解TcaplusDB技术】扫描数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

不用加盟费也能加盟自助洗车吗?

车白兔自助洗车机加盟

自助洗车加盟 自助洗车加盟费 车白兔自助洗车 加盟自助洗车多少钱

【深入理解TcaplusDB技术】读取列表指定位置数据示例代码——[List表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

【深入理解TcaplusDB技术】示例代码——异步调用接口

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

【深入理解TcaplusDB技术】更新数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

重新组装电脑后需要注意些什么?

InfoQ IT百科

【深入理解TcaplusDB技术】读取数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

【深入理解TcaplusDB技术】插入数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

Camtasia2022汉化版本屏幕录像软件

茶色酒

Camtasia2022

FL Studio20.8最新中文破解版下载

茶色酒

【深入理解TcaplusDB技术】删除数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

【深入理解TcaplusDB技术】读取列表所有数据示例代码——[List表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

Camtasia2022mac破解版电脑录屏软件

茶色酒

Camtasia2022

自动洗车加盟选择哪家比较好?

车白兔自助洗车机加盟

自助洗车机价格 自助洗车加盟 自助洗车机厂家 车白兔自助洗车

【深入理解TcaplusDB技术】替换数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

24小时自助洗车机价格一般多少

车白兔自助洗车机加盟

自助洗车机价格 自助洗车加盟 自助洗车设备多少钱 车白兔自助洗车机

CorelDRAW2022无限使用安装下载

茶色酒

cdr2022

【深入理解TcaplusDB技术】批量读取数据示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

库存管理与资产管理的区别是什么?

低代码小观

低代码 企业管理 资产管理 资产安全 WMS仓库管理

【深入理解TcaplusDB技术】示例代码——数据分批返回

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

【深入理解TcaplusDB技术】根据部分Key字段值读取数据示例代码——[Generic表]

tcaplus

所以,我们依然要读书!

博文视点Broadview

自助洗车机利润怎么样?加盟靠谱否

车白兔自助洗车机加盟

自助洗车加盟 自助洗车机利润 车白兔自助洗车

【深入理解TcaplusDB技术】加减字段值示例代码——[Generic表]

tcaplus

数据库 nosql TcaplusDB 腾讯游戏

面试突击42:synchronized和ReentrantLock有什么区别?

王磊

Java java面试

主板的稳定性和哪些因素有关系?

InfoQ IT百科

AI在游戏反外挂中的应用与实践

AI在游戏反外挂中的应用与实践

JavaOne 2016次日—— "并行编程思想"_Java_Monica Beckwith_InfoQ精选文章