我这个场景是做优先级的任务派发的,因为有几十个厂商,每个厂商还有不同的业务,每个业务也有10个优先级,这样算来整个任务缓冲池里最少又要几百个队列。 这里没用channel,因为channel通道太多,没法很好的做输出。  优先级肯定是有调度器主动去pop数据,这里选择了使用container/list提供的双端列表。 

我的服务主要体现在Push, Pop 类似的操作上,container/list都可以O(1)的时间复杂度。

该文章后续会有更新, 原文地址, http://xiaorui.cc/?p=4809

话题说 list 有个 remove的问题…  你遍历整个链表会发现只会删除第一个,当再次迭代的时候,e.Next() == nil 空值,跳出循环。。。

为什么会出现这个问题,我们可以看下 golang list 关于 remove方法的实现。  e.next = nil 注释是说,为了防止内存泄露…

那么我们该如何解决? 

END



对Python及运维开发感兴趣的朋友可以加QQ群 : 478476595 !!!
{ 2000人qq大群内有各厂大牛,常组织线上分享及沙龙,对高性能及分布式场景感兴趣同学欢迎加入该QQ群 }

另外如果大家觉得文章对你有些作用!   帮忙点击广告. 一来能刺激我写博客的欲望,二来好维护云主机的费用.
如果想赏钱,可以用微信扫描下面的二维码. 另外再次标注博客原地址  xiaorui.cc  ……   感谢!

golang使用sync保证container/list链表线程安全

一边python,一边golang ! 时常因为工作切换语言造成了短路。container/list是golang语言内置的链表库。 对比其他语言的list,container/list该有的功能都...

阅读全文

评论已关闭。