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%向上させることができますが、両方の生成と消費に同じ時間がかかる場合、ダブルバッファリングはスループットを2倍にする可能性があります。

例えば:

  • produce_time=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 に答える