青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品

隨筆-4  評論-40  文章-117  trackbacks-0

 



  “雙緩沖區”是一個應用很廣的手法。該手法用得最多的地方想必是屏幕繪制相關的領域(主要是為了減少屏幕閃爍)。另外,在設備驅動和工控方面,雙緩沖也經常被使用。不過今天要聊的,并不是針對上述的某個具體領域,而是側重于并發方面的同步/互斥開銷。另外提醒一下,雙緩沖方式和前面提到的隊列緩沖、環形緩沖是可以結合使用滴。

  ★為啥要雙緩沖區
  記得前幾天在介紹隊列緩沖區時,提及了普通隊列緩沖區的兩個性能問題:“內存分配的開銷”和“同步/互斥的開銷”(健忘的同學,先回去看看那個帖子復習一下)。“內存分配的開銷”已經在介紹環形緩沖區的時候解決了,而今天要介紹的雙緩沖區,就是沖著同步/互斥的開銷來的。
  為了防止有人給咱扣上“過度設計”的大帽子,又得來一個事先聲明:只有當同步或互斥的開銷非常明顯的時候,你才應該考慮雙緩沖區的使用。否則的話,大伙兒還是老老實實用最基本、最簡單的隊列緩沖區吧。

  ★雙緩沖區的原理
  前面說了一通廢話,現在開始切入正題,說說具體實現。
  所謂“雙緩沖區”,故名思義就是要有倆緩沖區(簡稱A和B)。這倆緩沖區,總是一個用于生產者,另一個用于消費者。當倆緩沖區都操作完,再進行一次切換(先前被生產者寫入的轉為消費者讀出,先前消費者讀取的轉為生產者寫入)。由于生產者和消費者不會同時操作同一個緩沖區(不發生沖突),所以就不需要在讀寫每一個數據單元的時候都進行同步/互斥操作。順便提一下,這又一次展現了空間換時間的優化思路。
  但是光有倆緩沖區還不夠。為了真正做到“不沖突”,還得再搞兩個互斥鎖(簡稱La和Lb),分別對應倆緩沖區。生產者或消費者如果要操作某個緩沖區,必須先擁有對應的互斥鎖。補充一句:要達到“不沖突”的效果,其實可以有多種搞法,今天只是挑一個簡單的來聊。

  ★雙緩沖區的幾種狀態
  為了加深某些同學的理解,再描述一下雙緩沖區的幾種狀態。
  ◇倆緩沖區都在使用的狀態(并發讀寫)
  大多數情況下,生產者和消費者都處于并發讀寫狀態。不妨設生產者寫入A,消費者讀取B。在這種狀態下,生產者擁有鎖La;同樣的,消費者擁有鎖Lb。由于倆緩沖區都是處于獨占狀態,因此每次讀寫緩沖區中的元素(數據單元)都不需要再進行加鎖、解鎖操作。這是節約開銷的主要來源。
  ◇單個緩沖區空閑的狀態
  由于兩個并發實體的速度會有差異,必然會出現一個緩沖區已經操作完,而另一個尚未操作完。不妨假設生產者快于消費者。
  在這種情況下,當生產者把A寫滿的時候,生產者要先釋放La(表示它已經不再操作A),然后嘗試獲取Lb。由于B還沒有被讀空,Lb還被消費者持有,所以生產者進入發呆(Suspend)狀態。
  ◇緩沖區的切換
  接著上面的話題。
  過了若干時間,消費者終于把B讀完。這時候,消費者也要先釋放Lb,然后嘗試獲取La。由于La剛才已經被生產者釋放,所以消費者能立即擁有La并開始讀取A的數據。而由于Lb被消費者釋放,所以剛才發呆的生產者會緩過神來(Resume)并擁有Lb,然后生產者繼續往B寫入數據。
  經過上述幾個步驟,倆緩沖區完成了對調,變為:生產者寫入B,消費者讀取A。

  ★可能的并發問題
  本來單個緩沖區的生產者/消費者問題就已經是教科書的經典問題了,現在搞出倆緩沖區,所以就更加耗費腦細胞了。一不小心,就會搞出些并發的Bug,而且并發的Bug還很難調試和測試(這也就是為啥不要輕易使用該玩意兒的原因)。
  ◇死鎖的問題
  假如把前面介紹的操作步驟調換一下順序:生產者或消費者在操作完當前的緩沖區之后,先去獲取另一個緩沖區的鎖,再來釋放當前緩沖區的鎖。那會咋樣捏?
  一旦兩個并發實體同時處理完各自緩沖區,然后同時去獲取對方擁有的鎖,那就會出現典型的死鎖(死鎖的詳細解釋參見“這里”)場景。它倆從此陷入萬劫不復的境地。

  ★應用場景
  介紹完并發問題,按照本系列的慣例,最后再來介紹一下雙緩沖區在某些場合的應用。
  ◇用于并發線程
  在線程方式下,首先要考慮的是緩沖區的類型:到底用隊列方式還是環形方式。這方面的選擇依據在介紹環形緩沖區的時候已經闡述過了,此處不再啰嗦(省去不少口水)。
  另一個需要注意的是,某些編程語言或者程序庫提供了的線程安全的緩沖區(比如JDK 1.5引入的ArrayBlockingQueue)。由于這種緩沖區會自動為每次的讀寫進行同步/互斥,所以就把雙緩沖的優勢抵消掉了。因此,大伙兒在進行緩沖區選型的時候要避開這類緩沖區。
  ◇用于并發進程
  在進程間使用雙緩沖,先得考察不同IPC類型的特點。由于今天討論雙緩沖的目的是降低同步/互斥的開銷,對于那些已經封裝了同步/互斥的IPC類型,就沒太大必要再去搞雙緩沖了(單憑這條就足以讓好多種IPC出局)。剩下的IPC類型中,比較適合用雙緩沖的主要是:共享內存和文件。非常湊巧,這兩個玩意兒的特點和適用范圍在環形緩沖區的帖子里面也已經介紹過了,俺又可以節省不少口水 :)
版權聲明
本博客所有的原創文章,作者皆保留版權。轉載必須包含本聲明,保持本文完整,并以超鏈接形式注明作者編程隨想和本文原始地址:
http://program-think.blogspot.com/2009/04/producer-consumer-pattern-4-double.html


posted on 2010-01-28 11:39 李陽 閱讀(2315) 評論(0)  編輯 收藏 引用

只有注冊用戶登錄后才能發表評論。
網站導航: 博客園   IT新聞   BlogJava   博問   Chat2DB   管理


青青草原综合久久大伊人导航_色综合久久天天综合_日日噜噜夜夜狠狠久久丁香五月_热久久这里只有精品
  • <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>
            一区二区激情| 99视频有精品| 欧美一区二区三区视频免费| 亚洲精品视频免费观看| 亚洲破处大片| 欧美风情在线观看| 欧美大片一区| 亚洲激情av在线| 亚洲精品你懂的| 日韩一本二本av| 亚洲一级影院| 久久黄色小说| 欧美激情导航| 国产乱码精品一区二区三区av| 国产日韩一区在线| 亚洲国产日韩一级| 午夜精品999| 免费亚洲一区| 中国女人久久久| 久久精品免费观看| 欧美日韩直播| 亚洲成色精品| 亚洲男人av电影| 欧美电影免费网站| 亚洲欧美精品伊人久久| 美玉足脚交一区二区三区图片| 欧美激情中文字幕在线| 国产综合久久久久影院| 国产精品99久久99久久久二8 | 午夜久久资源| 免费观看成人| 亚洲女人小视频在线观看| 鲁大师影院一区二区三区| 国产精品国产亚洲精品看不卡15 | 久久在线91| 9l视频自拍蝌蚪9l视频成人| 国产精品一区二区三区乱码| 国产精品日韩欧美综合| 亚洲精选一区| 亚洲午夜精品国产| 国产精品久久二区二区| 亚洲主播在线播放| 亚洲一区999| 国产视频欧美视频| 开心色5月久久精品| 久久久久久久久岛国免费| 亚洲高清免费视频| 亚洲国产99精品国自产| 欧美1区免费| 亚洲影院污污.| 欧美女同在线视频| 欧美精品黄色| 久久先锋影音av| 一区二区三区 在线观看视| 欧美jizz19性欧美| 亚洲一区二区三区乱码aⅴ蜜桃女| 老司机67194精品线观看| 亚洲图片在线| 国产精品久久网站| 亚洲欧美成人网| 亚洲视频中文字幕| 国产精品国产三级国产专区53| 一本色道久久综合精品竹菊 | 久久成人精品| 亚洲制服少妇| 国产农村妇女毛片精品久久莱园子 | 午夜天堂精品久久久久| 国产精品你懂的在线欣赏| 亚洲欧美日韩另类| 午夜精品久久久久久久蜜桃app| 国产精品免费福利| 久久精品99无色码中文字幕| 久久精品一本久久99精品| 亚洲国产高清视频| 亚洲人成啪啪网站| 欧美视频四区| 久久久久成人精品| 欧美承认网站| 午夜激情一区| 久久精品国产精品| 亚洲精品久久在线| 亚洲午夜av电影| 国产伊人精品| 欧美电影专区| 亚洲欧美日本在线| 亚洲精品乱码久久久久久| 老鸭窝亚洲一区二区三区| 在线观看日韩av先锋影音电影院| 欧美激情欧美激情在线五月| 欧美精品激情在线观看| 亚洲欧美另类在线观看| 久久精品视频导航| 夜夜嗨一区二区| 欧美中文字幕视频| 日韩亚洲一区二区| 午夜视频久久久久久| 亚洲精品国产精品久久清纯直播| 夜夜爽99久久国产综合精品女不卡| 国产欧美在线看| 亚洲人成人99网站| 国产永久精品大片wwwapp| 亚洲精品乱码久久久久| 国产一区二区三区四区三区四| 欧美福利小视频| 国产日产精品一区二区三区四区的观看方式 | 久久精品国产成人| 欧美电影免费观看高清完整版| 亚洲影视中文字幕| 欧美va日韩va| 久久久久久综合| 欧美视频一区二区在线观看| 蜜臀99久久精品久久久久久软件| 欧美性天天影院| 欧美国产日韩一区二区| 国精产品99永久一区一区| 国产精品99久久久久久白浆小说| 亚洲人成亚洲人成在线观看图片 | 亚洲欧洲日韩在线| 精品福利电影| 欧美一区二区免费观在线| 亚洲一区在线播放| 欧美人在线视频| 亚洲国产成人精品视频| 伊人成人开心激情综合网| 午夜精品久久久久久久99水蜜桃 | 欧美寡妇偷汉性猛交| 欧美成人tv| 亚洲成人在线网| 浪潮色综合久久天堂| 免费国产一区二区| 狠狠色噜噜狠狠狠狠色吗综合| 亚洲综合色噜噜狠狠| 欧美亚洲三区| 国产欧美亚洲一区| 9色国产精品| 亚洲国产精品一区二区尤物区 | 亚洲美女在线一区| 亚洲精品视频在线观看免费| 久久亚洲国产精品一区二区| 美女精品在线| 91久久精品国产91久久性色| 欧美阿v一级看视频| 亚洲麻豆av| 亚洲已满18点击进入久久| 国产精品免费小视频| 性伦欧美刺激片在线观看| 久久久女女女女999久久| 伊甸园精品99久久久久久| 欧美成人免费网站| 一区二区欧美日韩| 性欧美1819sex性高清| 国产一区在线看| 女女同性女同一区二区三区91| 亚洲国产一区二区三区青草影视| 亚洲伦理在线观看| 国产精品区二区三区日本| 先锋影音一区二区三区| 蜜桃av一区二区三区| 日韩一区二区高清| 国产欧美精品国产国产专区| 久久久久九九九| 亚洲日本欧美日韩高观看| 亚洲免费人成在线视频观看| 国产亚洲美州欧州综合国| 免费观看成人鲁鲁鲁鲁鲁视频| 欧美在线观看一区二区| 欧美高清视频www夜色资源网| 亚洲欧美日韩精品久久久| 欧美大片在线影院| 亚洲毛片在线免费观看| 国产精品一区二区久久国产| 久久女同精品一区二区| 麻豆国产va免费精品高清在线| 亚洲精品视频一区| 亚洲一区二区视频在线观看| 亚洲第一色在线| 一区二区免费在线观看| 在线观看91精品国产麻豆| 99国产精品久久久久老师| 国产一区二区三区精品久久久| 欧美激情精品久久久六区热门| 国产精品久久久久久久久久免费看 | 欧美一区二区三区四区视频| 亚洲精品护士| 在线亚洲精品| 久久蜜桃资源一区二区老牛 | 欧美在线视频免费| 亚洲黄色影院| 国产综合久久久久久| 欧美日韩一区二区三区在线看| 欧美在线不卡视频| 一本大道久久精品懂色aⅴ| 美女任你摸久久| 亚洲欧美文学| 99热在线精品观看| 有码中文亚洲精品| 好看的亚洲午夜视频在线| 国产欧美一区二区白浆黑人| 国产精品国产三级国产专播精品人| 欧美成人国产一区二区|