簡體   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