我实现了一个通过交换缓冲区来提高并发性能的队列,在某些生产-消费者场景可以代替 go 内置的 channel 获得更高的性能。
仅 200 多行代码,很容易理解。
灵感来源于文章: 如何避免过度依赖 mpsc
1
TrigVon 101 天前
|
3
gerorim 101 天前
学习了。不过为啥有的 mutex.Unlock 有用 defer ,有的则没有 b.bufferMu.Unlock()。
|
4
doraemonki OP @gerorim 我想着尽量让 Lock 和 Unlock 靠近些就行了,没考虑这么多
|
5
lysShub 101 天前
你那个 bench 应该不太对,ch 写入是会有阻塞的,而你那个直接 append ,只需要保证数据没有竞争,而不需要保证同步,相当于用内存换了时间
|
6
doraemonki OP @lysShub 其实把 ch 容量设置大些在不阻塞的情况下也是比 channel 快的,不过动态扩容也算一种特性了😂
|