zoukankan      html  css  js  c++  java
  • 多线程排序

    第一届淘宝并发编程比赛-多线程排序性能优化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

  • 相关阅读:
    bzoj2791
    poi2012完成
    bzoj2795
    bzoj2790
    spring cloud 学习资源
    hystrix学习
    idea live template
    intellij-maven-imports-have-broken-classpath
    springboot elk实时日志搭建
    idea author模板
  • 原文地址:https://www.cnblogs.com/jiayy/p/3419884.html
Copyright © 2011-2022 走看看