一、學習目標
1. 掌握三種併發的方式:程序、執行緒、i/o多路復用
2. 掌握執行緒控制及相關系統呼叫
3. 掌握執行緒同步互斥及相關系統呼叫
二、學習資源
1. 教材:第十一章《網路程式設計》簡單過一下
2. 教材:第十二章《併發程式設計》
如果邏輯控制流在時間上重疊,那麼他們就是併發的,這種常見的現象叫做併發。
併發不限制於核心:
12.1基於程序的併發程式設計
12.1.2關於程序的優劣
獨立的位址空間使得程序共享狀態資訊變得更加困難
基於i/o多路復用的併發程式設計
對於兩個事件:
針對不知道等待哪個事件,乙個解決辦法就是i/o多路復用技術。
基本思路就是使用select函式,要求核心掛起程序,只有在乙個或者多個i/o事件發生後,才將控制返回給應用程式,就像p651事例一樣:
12.2.1基於i/o多路復用的鬢髮事件驅動伺服器
i/o多復用可以做併發事件驅動程式的基礎,在時間驅動程式中,流是因為某種時間而前進的。
一般概念是將邏輯流模型化為狀態機。
優點:缺點:
基於執行緒是兩種方法的混合:
執行緒:就是執行在程序上下文中的邏輯流
多執行緒的執行模型在某些方面和多程序的執行模型是相似的。見p658圖
每個程序開始生命週期時都是單一執行緒,這個執行緒稱為主線程。
在某個時刻,主線程建立乙個對等執行緒從這個時間點開始,;兩個執行緒就併發地執行
最後,因為主線程執行乙個慢速系統呼叫。
對等執行緒會執行一段時間然後控制傳遞歸歸執行緒,一次類推
posix執行緒是在c程式中處理執行緒的乙個標準介面。
執行緒通過呼叫pthread_create函式來建立其他執行緒
乙個執行緒是以一下方式之一來終止的:
pthread_join函式會阻塞,直達執行緒tid終止,將執行緒例程返回的(void*)指標賦值為thread_return指定的位置,然後**已終止執行緒占用的所有儲存資源。
在任何乙個時間點上,執行緒是可結合的或者是分離的
乙個可結合的執行緒能夠被其他執行緒**其資源和殺死
pthread_once函式允許你初始化與執行緒例程相關的狀態。
從乙個程式設計師的角度來看,執行緒很有吸引力的乙個方面就是多個執行緒很容易共享相同的程式變數
一組併發執行緒執行在乙個程序的上下文中
每個執行緒都有它獨立的上下文,包括執行緒id、棧、棧指標、程式計數器和通用的目的計數器。
從實際的操作的角度來說,讓乙個執行緒去讀或者寫另乙個執行緒的暫存器值是不可能的
各自地理的執行緒棧的儲存器不是那麼整齊清楚的,這些棧被儲存在虛擬位址空間的棧區域中,並且通常是被相應的執行緒獨立地訪問的
我們說的乙個變數v是共享的,當且僅當它的乙個例項被乙個以上的執行緒引用。
共享訊號量是十分方便的,但是它們也引入了同步錯誤的可能性。
一般而言,你沒有辦法**作業系統是否將為你的執行緒選擇乙個正確的順序。
進度圖將n個併發執行緒的執行模型化為一條n維笛卡爾空間中的軌跡線。
每一條軸k對應執行緒k的進度,每個點(i1,...in)代表執行緒已經完成了指令ik的這一狀態。
使用訊號量進行互斥。s<0的不可行狀態定義了乙個禁止區,禁止區完全包括了不安全區,阻止了實際可行的軌跡線接觸不到的安全區。
除了提供互斥外,訊號量的另乙個重要作用是排程對共享資源的訪問。
幾個需要知道的比
有一類重要的執行緒安全函式,叫做可重入函式,其特點在於它們具有這樣的一種屬性:
當他們被多個執行緒呼叫時候、,不會引用任何共享資料。
大多數unix函式,包括定義在標準c語言庫中的函式都是執行緒安全的,只有小部分是例外。
因此,unix系統提供大多數執行緒不安全函式的可重入斑斑。
當乙個程式的正確性依賴於乙個執行緒要在另乙個執行緒到達y點之前到達它的控制流中的x點時,就會發生競爭。
乙個併發程式是由在時間上重疊的一組邏輯流組成的。
三種不同的構建併發程式的機制:
《 第十三周實驗報告 》
請寫出程式的執行結果,並在上機時對照理解 程式頭部注釋開始 程式的版權和版本宣告部分 檔名稱 animal.cpp 作 者 計114 3 王興鋒 完成日期 2012 年 5 月 15 日 版 本 號 v 2.0 include iostream includeusing namespace std ...
第十三周學習總結
這周學習的是怎麼將靜態檔案在django中顯示 首先要確定它們所在的位置 project01 與 static在同乙個根目錄下 然後需要修改settings.py,是上圖中所選的py檔案 本來的檔案是 static url static static root os.path.join base d...
第十三周學習總結
這一周下來,我感覺我整個人都不好了。早上照鏡子的時候都感覺自己瘦的沒有人形了。感覺被專案給搞的身心俱疲。特別是最近,感覺自己的脾氣特別暴躁。其實對於我們每個人來說都承擔著巨大的壓力,只是有的沒有表現出來而已。身為組長,直到最近我才知道身為組長其實要做的事情不只是我以前認為的那些只是簡單地把控前後端的...