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