多线程排序

第一届淘宝并发编程比赛-多线程排序性能优化http://ifeve.com/tao-code-match-1/

在这里看到一道题目,从一个文件里读取字符串,排序,然后写入另一个文件。

用C实现了一下,逻辑比较简单:

1 将文件读取进来放到一个结构数组里

2 根据线程数目N切割这个数组为N个子数组(如果无法整切,多出来的部分由主线程负责排序),每个线程使用qsort算法排序子数组

3 主线程等待所有子线程排好序,然后归并子线程的结果

4 将结果写入文件

在我的机器上,Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz,用4个线程,结果如下:

read fp : ./sowpods.txt
num of words : 267751
READ: usetime = 20.000000 ms
SORT: usetime = 29.000000 ms
MEGRE: usetime = 31.000000 ms   ——> 29+31 = 60ms 排序用了60ms
write fp : ./results.txt
num of words : 267751
WRITE: usetime = 48.000000 ms

8个线程,排序部分用时 SORT: usetime = 18.000000 ms

            MEGRE: usetime = 36.000000 ms 18+36=54ms 

16个线程,SORT: usetime = 15.000000 ms

         MEGRE: usetime = 45.000000 ms   ——> 15+45=60 ms 线程数到达一定数目,性能就上不去了,估计是因为线程增多之后,内核线程固定开销部分的增加跟由于数据量减少得到的性能提升抵消了

目前存在一个问题:归并部分目前是单线程的,这个操作时间比较长

代码可以参考:git clone https://github.com/jiayeah/WordSorter.git

转载于:https://www.cnblogs.com/jiayy/p/3419884.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值