Go 并发排序
单机版外部排序
一、基础补充
2-1 Hello world网络版
(访问:localhost:8888)
2-2 Helloworld并发版
第一种
第二种
第三种
第四种
2-3 内部排序示例
3-1 归并排序算法
主要结构:
3-2 基础节点
3-3 归并节点
3-4 文件读写
生成随机数
ArraySource
支持分块
创建一个用于排序的源头,通过可变参数...传入设置的值,返回的时候注意要close(out)
InMemSort
创建一个内部排序函数,从内存中获取并利用sort.Ints(a)来排序。
使用:
Merge
针对多个源进行排序,与上面区别是输入源多了一个,需要判断
使用
ReaderSource
读取数据源,chunkSize是确认读取数据大小,如果读完就不读了。注意这里语句make([ ]byte,8)
WriteSink
写入数据
RandomSource
利用随机数生成数据
MergeN
搭建归并节点组
归并排序
使用
外部排序整合小文件
使用:
具体实现:
运行结果(查看大小)
外部排序整合大文件
在pipeline0807里增加
(因为大文件一会读不玩,我们利用时间看下到底是怎么的)
在InMemSort中增加输出,并将out创建时候,改成1024
在Merge里增加输出
在外部排序里面增加
在createPipeline调用init函数
修改主函数:计算机是4核的,因此参数为4比较划算,文件大小改为800000000比较慢,这里我采用较小的
输出大致为:
笔记,万变不离。