双缓冲设计I / O同步

时间:2011-03-25 01:46:10

标签: c multithreading pthreads doublebuffered

如果我的应用程序缓慢生成数据但是快速消耗它,它是否适合双缓冲区实现?基本思想是让生产者填充后台缓冲区,而消费者处理前台缓冲区。 我不希望客户端看起来像是在等待数据。我想平衡生产和消费。我该如何实现此功能?即使我有一个后缓冲线程....它必须与前缓冲线程同步,因此前缓冲区知道何时有新数据(缓冲区被交换)。如果后缓冲线程花费太长时间来生成数据,则前缓冲区必须等待处理它。

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
}

1 个答案:

答案 0 :(得分:2)

如果您的应用程序“缓慢生成数据但会快速消耗”,那么这将限制您从双缓冲中获得的收益。

如果生成一个充满数据的缓冲区需要10秒钟,而消耗它需要1秒钟,双缓冲可以将吞吐量提高10%,但如果生产和消耗两者都需要相同的时间,那么双缓冲可能会加倍你的吞吐量。

例如:

  • produce_time = 10秒
  • consume_time = 1秒
  • 缓冲区数量= 100

顺序处理= 100 *(10 + 1)= 1,100秒
双缓冲= 100 * 10 = 1,000秒

但是,如果我们更改参数所以consume_time = 10秒:

顺序处理= 100 *(10 + 10)= 2,000秒
双缓冲= 100 * 10 = 1,000秒