高级知识点:并行计算【笔记】

高级知识点:并行计算【笔记】

并行计算

并行计算的方法

将数据拆分到每个节点上,对应的问题就是如何拆分

每个节点并行的计算出结果,对应的问题是每一个节点算出来的是什么结果

将结果汇总,问题就是如何汇总结果

例如,如何排序10G个元素?

外部排序一般会使用扩展的归并排序

归并排序操作:将数据分为左右两半,分别归并排序,再将两个有序数据归并,那么如何归并?

简单来说就是先比较数的大小,然后将小的数提出来,当两边一样大的时候,放左边的数

这样外部排序就可以


整个算法的实现重点部分在归并的方法

归并结点的实现(k路归并)

需要使用堆的结构来优化,因为堆是二叉树,树根就是最小点,然后一点一点将树根取出来,一路比较变换,最后结束

这种在库中一般叫做priorityqueue

只要每个数据源最小的元素放到内存中就可以,但是这样就会很慢,效率比较低,所以可以设置一个缓冲区,一点一点的输出

在归并中使用iterable接口,可以不断地获取下一个元素,同时元素的存储/获取方式被抽象,与归并结点无关,因此就变成了


归并数据源来自iterable.next()

如果缓冲区为空,读取下一批元素放入缓冲区

给出缓冲区第一个元素

可配置项:缓冲区大小,如何读取下一批元素

感谢观看,文笔有限,博客不出彩,还请多多见谅
原文地址:https://www.cnblogs.com/jokingremarks/p/14474106.html