gitalk icon indicating copy to clipboard operation
gitalk copied to clipboard

高效I/O并发处理:双缓冲和Exchanger

Open utterances-bot opened this issue 1 year ago • 4 comments

高效I/O并发处理:双缓冲和Exchanger

双缓冲(double buffering)是高效处理I/O操作的一种并发技术,它使用两个buffer,一个goroutine使用其中一个buffer进行写,而另一个goroutine使用另一个buffer进行读,然后进行交换。这样两个goroutine可能并发的执行,减少它们之间的等待和阻塞。 本文还提供了一个类似Java的java.util.concurrent.Exchanger的Go并发原语

https://colobu.com/2024/01/14/double-buffering-and-Exchanger/

utterances-bot avatar Jan 15 '24 07:01 utterances-bot

有点意思,另外,可能出现读写性能不平衡的情况,一般都是负责读并处理的一方,应该可以读取后并发处理来提高消费速度

fengqi avatar Jan 15 '24 07:01 fengqi

有点意思,另外,可能出现读写性能不平衡的情况,一般都是负责读并处理的一方,应该可以读取后并发处理来提高消费速度

嗯,后面的处理可以采用 Reactor 模式, 一个消费者负责读取,然后交给多个worker异步的处理。

smallnest avatar Jan 15 '24 07:01 smallnest

本质还是空间换时间,利用读和写两类操作的差异作为划分依据。 和只使用一块区域(同时存读和写数据,以一个下标划分两块数据)相比,可以对整块读或写区域做操作了。

q147258134 avatar Jan 15 '24 07:01 q147258134

抱歉,我有一点没懂,使用双 buffer 代替 单个 goroutine,那为什么不使用 channel 呢?

dingdayu avatar Jul 16 '24 05:07 dingdayu