繁体   English   中英

双缓冲设计I / O同步

[英]double buffer design I/O synchronization

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

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
}

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

如果生成一个充满数据的缓冲区需要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秒

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM