Golang 中的 swap-buffer-queue

101 天前
 doraemonki

我实现了一个通过交换缓冲区来提高并发性能的队列,在某些生产-消费者场景可以代替 go 内置的 channel 获得更高的性能。


仅 200 多行代码,很容易理解。

灵感来源于文章: 如何避免过度依赖 mpsc

仓库地址

1267 次点击
所在节点    Go 编程语言
6 条回复
TrigVon
101 天前
uiosun
101 天前
🥳

@TrigVon 还以为你是 emoji ,没想到哈哈
gerorim
101 天前
学习了。不过为啥有的 mutex.Unlock 有用 defer ,有的则没有 b.bufferMu.Unlock()。
doraemonki
101 天前
@gerorim 我想着尽量让 Lock 和 Unlock 靠近些就行了,没考虑这么多
lysShub
101 天前
你那个 bench 应该不太对,ch 写入是会有阻塞的,而你那个直接 append ,只需要保证数据没有竞争,而不需要保证同步,相当于用内存换了时间
doraemonki
101 天前
@lysShub 其实把 ch 容量设置大些在不阻塞的情况下也是比 channel 快的,不过动态扩容也算一种特性了😂

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1062807

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX