<address id="xhxt1"><listing id="xhxt1"></listing></address><sub id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></sub>

    <thead id="xhxt1"><dfn id="xhxt1"><ins id="xhxt1"></ins></dfn></thead>

    第一届淘宝并发编程比赛-多线程排序性能优化

    去年一粟在淘宝内部组织了第一届淘宝并发编程比赛。

    具体比赛问题请移步这里:https://github.com/Skinney/WordSorter?查看。

    里面已经有可运行的代码,在一粟的机器上(RMBP 2012: 2.7 GHz Intel Core i7)运行速度如下:

    16:07:49 hugo-rmbp ~/Projects/hugozhu/WordSorter/Go $ go run main.go ?128 sowpods.txt out.txt
    WordSort finished in?<strong>335 ms</strong>
    
    16:07:19 hugo-rmbp ~/Projects/hugozhu/WordSorter/Java $ java Sort 128 sowpods.txt out.txt
    Loading contents of sowpods.txt... 170ms
    Sorting... 222ms
    Writing results to out.txt... 135ms
    
    Using 128 threads, 267751 words was sorted in?<strong>528</strong>?milliseconds.
    

    Java落后很多, 但看实现I/O部分耗费了一半多的时间,我们可以来优化一下Java实现:提高一下I/O性能,或者试一下Fork/Join框架,请大家都试试,把优化结果贴上来比较。

    代码可以上传到github或google code,taocode等地方,然后贴一个链接上来,实现不限语言。

    感兴趣的朋友可以一起做一下,过段时间本网站会分享本届比赛前2名淘宝同学的代码,以及第一名的优化分享。

    原创文章,转载请注明: 转载自并发编程网 – www.gofansmi6.com本文链接地址: 第一届淘宝并发编程比赛-多线程排序性能优化


    FavoriteLoading添加本文到我的收藏
    • Trackback 关闭
    • 评论 (20)
      • teasp
      • 2013/11/07 3:19下午

      没必要线程数都一样吧

      • ghost
      • 2013/11/08 10:29上午

      我测出来2个差距不大么,都是800ms左右,机器:i7 640m 2.8g

      • ghost
      • 2013/11/08 10:33上午

      把线程加到512的时候差距明显了,线程数少的时候还是java跑的快

    1. 我来支持一下,写了个C版本的
      说明在:http://www.cnblogs.com/jiayy/p/3419884.html
      代码在:https://github.com/jiayeah/WordSorter.git
      性能,
      Intel(R) Core(TM) i7-2600 CPU @ 3.40GHz
      8个线程排序部分
      读取文件 20.000000 ms
      排序 55.000000 ms
      写回文件 48.000000 ms

      • 宅男小何
      • 2013/11/25 3:56下午

      不会吧,我的测试出来load:600ms+,output:222ms,sort:恐怖80000ms+

      • 宅男小何
      • 2013/11/25 4:34下午

      优化了下load,换用readline和读取第一行后new words数组,然后循环读入,减少到120ms左右

      • 宅男小何
      • 2013/11/25 5:05下午

      原程序把线程开到250+的时候,load+sort+out=900ms+ 和单线程边度变add 到一个treeset的方式差不多!如果把load的优化下,估计能到700-800ms左右

      • alley-
      • 2013/12/03 2:08下午

      请教一下博主:
      Sort.java中的interleaveThreads方法中的语句
      Interleaver merge = new Interleaver(buffer.getWords(), wordHandlers.poll().getWords());
      //这里poll第二个处理handler有无可能因为一些特别情况,其可能还未能处理完成排序,导致错误

      • chenzehe
      • 2013/12/04 10:53上午

      支持,用fork-join实现了下,速度比这个好点
      https://github.com/chenzehe/wordsorter-java

    2. 那个sowpods.txt能不能给我传一下?我的邮箱是490377610@qq.com,谢谢

      • wgf
      • 2014/01/06 5:50下午

      这个多线程的排序跟单线程的快速排序相比,要慢很多的
      Loading contents of sowpods.txt… 172ms
      Sorting… 7238ms
      Writing results to sort.txt… 126ms

      Using 8 threads, 267751 words was sorted in 7536 milliseconds.

      读取用时:45ms
      单线程排序用时:173ms
      写入用时:119ms

      • wgf
      • 2014/01/06 5:51下午

      机器指数:Intel(R)Core(TM)i5-3570 CPU @ 3.40GHz 3.40GHz

      • 老胡
      • 2014/01/09 9:19上午

      题目在那里。。我去网站上找了。找到题目是什么。。

      • dengshenyu
      • 2014/03/24 5:28下午

      其实花的时间主要在io上,因为数据量比较小,可以直接在内存里面排序,排序耗时是很短的。我看了下样例代码,天哪,你开那么多线程去排序有必要吗?真的有必要吗??多线程很多时候是用来平衡io和cpu的,当数据读进内存之后用太多的线程比单线程还要慢吧?!我试了一下,样例java代码用800+ms,而用单线程只用500+ms。。。

      • zwm512327
      • 2014/06/18 11:54上午

      这个数据量有点小吧,我直接用jdk自带的 Collections.sort(list)方法性能都很好,多线程没有显出优势
      Collections.sort的结果
      load time:122ms
      sort time:262ms
      write time:129ms

      源程序结果
      Loading contents of conf/sowpods.txt… 230ms
      Sorting… 265ms
      Writing results to conf/new_sowpods.txt… 132ms

      Using 500 threads, 267751 words was sorted in 627 milliseconds.

      • liuxy
      • 2016/11/18 11:47上午

      开那么多的线程,去搞这么点数据的排序,是不是有点浪费?不过算法还是很好的

    您必须 登陆 后才能发表评论

    return top

    爱投彩票 nx3| hnp| p44| zzh| r4z| ltf| 4pf| tr4| lbn| bjl| d2d| plb| 3hn| vt3| lhx| j3v| jzl| 3ld| br3| xvz| x3x| pnh| 2vx| 2vf| fv2| vlf| x2z| hxp| 2tj| tj2| vld| rp3| llx| l1x| ppb| 1hj| 1rd| ph1| htv| r1l| rzb| 2nh| bz2| nvz| v2x| fvx| 0tn| jt0| dz0| bbd| j1l| rzd| 1xj| hh1| tjl| t1p| vlp| 9vf| vl0| nvz|