go1.6中sort排序bug问题

董泽润 · · 2438 次点击 · · 开始浏览    
这是一个创建于 的文章,其中的信息可能已经有所发展或是发生改变。

场景

线上广告系统需要对广告进行排序,这一块其实蛮复杂的,涉及流量规划,点击反馈。不过为了快速上线,这些先不考虑,使用官方库 sort 进行排序,只要实现 Less Swap Len 三个涵数就可以,非常简单。

问题

对于不同类型广告,正式,预上线,运营卡片,严格遵守排序的,但是同一类型的要随机一个位置 ,这样用户匹配时从数组超始位置匹配即可。升级go1.6后,不定期的会发生 sort panic


panic

我们的 Swap 函数实现大致如下:


原始sort

对于同等地位的广告做随机排序,使用 rand ,压测稳定复现panic。后来把 rand 逻辑扔到了外面,在广告生成时,随机给一个权重,不使用rand排序,压测后就不会复现。


新版sort

最后

这是个已知问题,在官方 issue 里面提到过,并且已经 fix了。涉及到底层快序排序算法,作者为了优化性能引入了一个bug,作者已经修复了,但是当前还没有 go binary release,再等等吧,暂时用新版 sort 规避掉。

这里 有测试程序,感兴趣的可以看看。


有疑问加站长微信联系(非本文作者)

本文来自:简书

感谢作者:董泽润

查看原文:go1.6中sort排序bug问题

入群交流(和以上内容无关):加入Go大咖交流群,或添加微信:liuxiaoyan-s 备注:入群;或加QQ群:692541889

2438 次点击  
加入收藏 微博
暂无回复
添加一条新回复 (您需要 登录 后才能回复 没有账号 ?)
  • 请尽量让自己的回复能够对别人有帮助
  • 支持 Markdown 格式, **粗体**、~~删除线~~、`单行代码`
  • 支持 @ 本站用户;支持表情(输入 : 提示),见 Emoji cheat sheet
  • 图片支持拖拽、截图粘贴等方式上传