码迷,mamicode.com
首页 > 编程语言 > 详细

Go 并发排序

时间:2018-08-07 12:51:30      阅读:125      评论:0      收藏:0      [点我收藏+]

标签:com   内存   随机   分块   out   ems   比较   chunk   实现   

单机版外部排序

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比较慢,这里我采用较小的

技术分享图片

输出大致为:

技术分享图片

 

Go 并发排序

标签:com   内存   随机   分块   out   ems   比较   chunk   实现   

原文地址:https://www.cnblogs.com/ycx95/p/9435901.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!