Golang 中的 swap-buffer-queue

2024-08-06 09:39:56 +08:00
 doraemonki

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


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

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

仓库地址

1680 次点击
所在节点    Go 编程语言
6 条回复
TrigVon
2024-08-06 10:23:02 +08:00
uiosun
2024-08-06 10:24:32 +08:00
🥳

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

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

https://ex.noerr.eu.org/t/1062807

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

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

© 2021 V2EX