0

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

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
}
4

1 回答 1

2

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

如果生成一个充满数据的缓冲区需要 10 秒,而消耗它需要 1 秒,那么双缓冲可以将您的吞吐量提高 10%,但是如果生成和消耗都需要相同的时间,那么双缓冲可能会使您的吞吐量翻倍.

例如:

  • 生产时间 = 10 秒
  • 消耗时间 = 1 秒
  • 缓冲区数 = 100

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

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

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

于 2011-03-25T03:35:02.867 回答