關于這幾個概念一直理解的不是特別清楚实昨,而且我在學校做的是基于tilera多核處理器的hevc多路視頻并行編碼,對線程和并行有些許了解盐固,但是我覺得還是要復習下荒给。。(理解的不好刁卜。)
預熱:
一個應用程序中至少有一個進程(os資源分配的最小單位)志电,一個進程中至少一個線程(cpu調(diào)度的最小單位)
-
并發(fā):
1.在操作系統(tǒng)中,是指一個時間段中有幾個程序都處于已經(jīng)啟動運行到運行完畢之間蛔趴,且這幾個程序都是在同一個處理機上運行挑辆,但任一時間點上都只有一個程序在處理機上運行
2.當有多個線程在操作時,如果系統(tǒng)只有一個CPU孝情,則它根本不可能真正的同時運行一個以上的線程鱼蝉,它只能把CPU的運行時間劃分成若干個時間段,再把時間段分給各個線程去執(zhí)行(單個CPU為啥還搞多線程箫荡?雖說多線程出來是為了多核時代魁亦,但是他可以防止程序阻塞,也可以方便編程建模)菲茬,在一個時間段中的某個線程運行吉挣,其他的線程都處于掛起狀態(tài),這種方式我們稱為并發(fā)(就是一個坑(cpu)婉弹,大家一起去拉屎 你拉一下 我拉一下 防止某一個人拉不出來 占著坑(阻塞)) - 并行:當系統(tǒng)有一個以上的CPU時睬魂,則線程的操作有可能非并發(fā)。當一個CPU執(zhí)行一個線程的時候镀赌,另一個CPU執(zhí)行另一個線程氯哮,兩個線程互不搶占資源,可以同時進行商佛,這種方式我們稱為并行(廢話多個cpu就是多個坑喉钢,每一個去拉屎的人就是線程,資源多當然不怕阻塞良姆,隨便并行咯)
第一彈
進程同步用來實現(xiàn)程序并發(fā)執(zhí)行時候的可再現(xiàn)性
-
進程同步: 就是在發(fā)出一個功能調(diào)用時肠虽,在沒有得到結果之前,該調(diào)用不能返回玛追。也就是必須一件一件的做事情税课,等前一件做完才能做下一件事情,就像早晨起床后痊剖,刷牙韩玩,吃飯,不能沒刷牙就吃飯陆馁。按照這個定義找颓,其實絕大多數(shù)函數(shù)都是同步調(diào)用(不返回值就會停在這里)。(一般而言叮贩,我們說同步異步的時候击狮,特指那些需要其他部件協(xié)作或者需要一定時間完成的任務)sendmessage該函數(shù)發(fā)送一個消息給某一個窗口,在對方處理消息之前妇汗,這個函數(shù)不返回帘不。當對方處理完畢后,該函數(shù)才能把消息處理函數(shù)所返回的result返回給調(diào)用者
2.異步:異步的概念與同步相對杨箭。當一個異步過程調(diào)用發(fā)出后寞焙,調(diào)用者不能立刻得到結果。實際處理這個調(diào)用的部件在完成后互婿,通過(狀態(tài)捣郊、通知和回調(diào)來返回給調(diào)用者)jdbc(調(diào)用者線程)請求數(shù)據(jù)庫連接的時候,調(diào)用者線程可以繼續(xù)運行下一步的statement 執(zhí)行sql(沒真正執(zhí)行)慈参,當連接真正的建立起來呛牲,數(shù)據(jù)庫驅(qū)動管理會獲取到來自數(shù)據(jù)庫的通知?(我這是在講一個概念驮配,并不一定就是這樣)娘扩。
這里降到執(zhí)行部件和調(diào)用者通過三種途徑返回結果(狀態(tài)着茸、通知、回調(diào))琐旁。具體使用哪一種依賴于執(zhí)行部件的實現(xiàn)涮阔,除非執(zhí)行部件提供多種選擇,否則不收調(diào)用者控制灰殴。
a.如果執(zhí)行部件用狀態(tài)來通知敬特,那么調(diào)用者就需要輪詢(每隔一定時間檢查一次)
b.使用通知的方式,效率比較高牺陶,因為執(zhí)行部件幾乎不需要做額外的操作
c.回調(diào)函數(shù)伟阔,本質(zhì)上和通知沒有很大的區(qū)別
進程同步的基本概念
在計算機系統(tǒng)中,由于資源有限而導致進程之間的資源競爭和共享掰伸,因此皱炉,進程的并發(fā)執(zhí)行不僅僅是用戶程序的執(zhí)行開始時間的隨機性和提高資源利用率的結果,也是資源有限性導致資源的競爭和共享對進程的執(zhí)行過程進行制約所造成的狮鸭。那么在進程的并發(fā)執(zhí)行過程中存在哪些閱知呢娃承?