在塊裝置輸入資料的過程中,首先把磁碟資料送到緩衝區,花費的時間為ts,(簡記為ts過程)
然後把作業系統緩衝區的資料送到使用者區,花費的時間為tm,(簡記為tm過程)
最後使用者程序對這批資料進行計算,花費的時間為tc。(簡記為tc過程)
當tc過程與tm過程操作同一塊緩衝區時,這兩個操作不能並行(讀寫鎖),ts過程和tm一直都不能並行
單緩衝的情況如下:
當ts>tc,(上圖)主要是tm與ts不能並行,因此總時間t=(n*(ts+tm)+tc)/n=ts+tm
當ts綜上,單緩衝下平均時間t=max(ts,tc)+tm
雙緩衝條件下,ts過程與tm過程可以並行,tm過程與tc過程不能並行
當ts>tc時,(上圖)由於tm<
當tstc情況下的max(tc,ts)
綜上,雙緩衝平均時間為max(tc,ts)
雙緩衝和後備緩衝
前面的例子都是,直接在主表面上繪東西。對於動畫,直接在主表面上繪,會產生很嚴重的閃爍。解決的辦法是採用雙緩衝或後備緩衝。雙緩衝 在離屏緩衝中繪製影象,然後將其拷貝到顯示表面。見下面 先把資料放到double buffer,最後再拷貝到主表面上。下面sleep 300 睡眠了0.3秒這麼長的時間是為了...
雙緩衝和單快取的區別
雙緩衝和單快取的區別 編碼時遇到glutinitdisplaymode unsigned int mode 函式,主要作用是設定初始顯示模式,其中有兩個可用形參不甚理解。分別為glut single,glut double。其中glut single指定單快取視窗,glut double指定雙快取視...
全緩衝和行緩衝的區別
在 nix系統中,緩衝方式存在三種,分別是 1,全緩衝 2,行緩衝 3,無緩衝 在學習apue這本書時,程式8 1中,就很好的體現了全緩衝和行緩衝的區別,如下 編譯成功後,我這裡生成的二進位制檔案預設為a.out 執行 a.out 可以看到結果如下 執行.a.out temp.out 結果如下 分析...