如果我的应用程序缓慢生成数据但是快速消耗它,它是否适合双缓冲区实现?基本思想是让生产者填充后台缓冲区,而消费者处理前台缓冲区。 我不希望客户端看起来像是在等待数据。我想平衡生产和消费。我该如何实现此功能?即使我有一个后缓冲线程....它必须与前缓冲线程同步,因此前缓冲区知道何时有新数据(缓冲区被交换)。如果后缓冲线程花费太长时间来生成数据,则前缓冲区必须等待处理它。
void fill_back_buffer() {
//wait to fill buffer
//fill back buffer
//swap buffers and notify other thread
}
void process_data() {
//wait to see if buffers have been swapped
//buffers been swapped so send data out
//while sending data out start filling back buffer with new data
}
答案 0 :(得分:2)
如果您的应用程序“缓慢生成数据但会快速消耗”,那么这将限制您从双缓冲中获得的收益。
如果生成一个充满数据的缓冲区需要10秒钟,而消耗它需要1秒钟,双缓冲可以将吞吐量提高10%,但如果生产和消耗两者都需要相同的时间,那么双缓冲可能会加倍你的吞吐量。
例如:
顺序处理= 100 *(10 + 1)= 1,100秒
双缓冲= 100 * 10 = 1,000秒
但是,如果我们更改参数所以consume_time = 10秒:
顺序处理= 100 *(10 + 10)= 2,000秒
双缓冲= 100 * 10 = 1,000秒