原文出自:http://blog.csdn.net/xiaohui_hubei/article/details/16319249
一、雙緩沖作用
雙緩沖甚至是多緩沖,在許多情況下都很有用,一般需要使用雙緩沖區的地方都是由于“生產者”和“消費者”供需不一致所造成的,這樣的情況在很多地方后可能會發生,使用多緩沖可以很好的解決,我舉幾個常見的例子:
例 1. 在網路傳輸程序中資料的接收,有時可能資料來的太快來不及接收導致資料丟失,這是由于“發送者”和“接收者”速度不一致所致,在他們之間安排一個或多個緩沖區來存放來不及接收的資料,讓速度較慢的“接收者”可以慢慢地取完資料不至于丟失,
例2. 再如,計算機中的三級快取結構:外存(硬碟)、記憶體、高速快取(介于CPU和記憶體之間,可能由多級),從左到右他們的存盤容量不斷減小,但速度不斷提升,當然價格也是越來越貴,作為“生產者”的 CPU 處理速度很快,而記憶體存取速度相對CPU較慢,如果直接在記憶體中存取資料,他們的速度不一致會導致 CPU 能力下降,因此在他們之間又增加的高速快取來作為緩沖區平衡二者速度上的差異,
例3. 在圖形影像顯示程序中,計算機從顯示緩沖區取資料然后顯示,很多圖形的操作都很復雜需要大量的計算,很難訪問一次顯示緩沖區就能寫入待顯示的完整圖形資料,通常需要多次訪問顯示緩沖區,每次訪問時寫入最新計算的圖形資料,而這樣造成的后果是一個需要復雜計算的圖形,你看到的效果可能是一部分一部分地顯示出來的,造成很大的閃爍不連貫,而使用雙緩沖,可以使你先將計算的中間結果存放在另一個緩沖區中,但全部的計算結束,該緩沖區已經存盤了完整的圖形之后,再將該緩沖區的圖形資料一次性復制到顯示緩沖區,
例1 中使用雙緩沖是為了防止資料丟失,例2 中使用雙緩沖是為了提高 CPU 的處理效率,而例3使用雙緩沖是為了防止顯示圖形時的閃爍延遲等不良體驗,
二、雙緩沖原理
這里,主要以雙緩沖在圖形影像顯示中的應用做說明,
上面例3中提到了雙緩沖的主要原理,這里通過一個圖再次理解一下:
注意,顯示緩沖區是和顯示幕一起的,顯示幕只負責從顯示緩沖區取資料顯示,我們通常所說的在顯示幕上畫一條直線,其實就是往該顯示緩沖區中寫入資料,顯示幕通過不斷的重繪(從顯示緩沖區取資料),從而使顯示緩沖區中資料的改變及時的反映到顯示幕上,
這也是顯示復雜圖形時造成閃爍的原因,比如你現在要顯示從螢屏中心向外發射的一簇射線,你開始撰寫代碼用一個回圈從0度開始到360度,每隔一定角度畫一條從圓心開始向外的直線,你每次畫線其實是往顯示緩沖區寫入資料,如果你還沒有畫完,顯示幕就從顯示緩沖區取資料顯示圖形,此時你看到的是一個不完整的圖形,然后你繼續畫線,等到顯示幕再次取顯示緩沖區資料顯示時,圖形比上次完整了一些,依次下去直到顯示完整的圖形,你看到圖形不是一次性完整地顯示出來,而是每次顯示一部分,從而造成閃爍,
原理懂了,看下 demo 就知道怎么用了,下面先介紹 Win32 API 和 C# 中如何使用雙緩沖,其他環境下由于沒有用到所以沒寫,等用到了再在下面補充,不過其他環境下程序也基本相似,
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/238960.html
標籤:其他
上一篇:處理器管理-多執行緒技術
下一篇:記第一次重裝系統
