本身還在學習當中…如下筆記所有來自其餘博主,還有本身蒐集的結果多線程
一、 操做系統的四個特性併發
1)併發:同一時間內執行多個程序異步
區別並行和併發:socket
並行:兩個或者多個事件在同一時刻發生,要有同時處理多個任務的能力學習
併發:兩個或者多個事件在同一時間間隔發生,要有處理多個任務的能力,不必定要同時 spa
*理解:操作系統
2)共享:系統中的資源,能夠被內存中,多個併發執行的進程線程共同使用。線程
3)虛擬:經過時分複用(如分時系統)以及空分複用(如虛擬系統)技術,實現把一個物理實體,虛擬爲多個。設計
4)異步:系統中的進程是以走走停停的方式執行的,且以一種不可預知的速度推動。對象
同步和異步:
同步:指一個進程在執行某個請求的時候,若該請求須要一段時間才能返回信息,那麼這個進程將會一直等待下去,知道接收到返回信息才繼續執行下去。即,按順序執行,執行完一個才執行下一個
異步:指進程不須要一直等下去,而是繼續執行下面的操做,無論其餘進程的狀態。
二、進程與線程
2.1 概念
1)進程
是執行中一段程序,即一旦程序被載入到內存中並準備執行,就是一個進程(一個任務)。進程是標識資源分配的基本概念,又是調度運行的基本單位,是系統中的併發執行的單位。
2)線程
單個進程執行中的每一個任務就是一個線程。線程是進程種執行運算的最小單位。
一個進程上能夠同時建立多個線程
*理解:
*連接:https://www.liaoxuefeng.com/wiki/897692888725344/923056118147584
2.2 多任務概念
操做系統的多任務:指在同一時刻運行多個程序的能力
通常狀況下的多任務:一個程序同時執行多個任務。一般,每個任務稱爲一個線程。
2.3 進程和線程的區別
1)一個線程只能屬於一個進程,可是一個進程能夠擁有多個線程。
多線程處理:就是運行一個進程種在同一時刻執行多個任務。
2)線程是一種輕量級的進程,與進程相比,線程給操做系統帶來的側建立、維護和管理的負擔要輕,意味着線程的代價或開銷比較小。
3)線程沒有地址空間,線程包含在進程的地址空間中。線程上下文只包含一個堆棧、一個寄存器、一個優先權,線程文本包含在它的進程文本片斷中,進程擁有的全部資源都屬於線程。全部的線程共享進程的內存和資源。
4)同一進程中的多個線程共享代碼段(代碼和常量),數據段(全局變量和靜態變量),擴展段(堆存儲)。可是每一個線程擁有本身的棧段、寄存器的內容,棧段又叫運行時段,用來存放全部的局部變量和臨時變量。
5)父和子進程使用進程間通訊機制,同一進程的線程經過讀取和寫入數據到進程變量來通訊。線程之間通訊更方便。
6)
2.4 進程的狀態與轉換
1)進程的狀態:
就緒(Ready)狀態:線程已處於準備運行的狀態,即進程得到了除處理機以外的一切所需資源,一旦獲得處理機,便可運行
執行(Running)狀態:進程正在處理機上運行,在單處理機環境下,每一時刻最多隻有一個進程處於執行狀態
阻塞(Block)狀態:又稱等待狀態。進程正在等待某一事件而暫停運行。如等待某資源爲可用,或等待輸入/輸出完成。即便處理及空閒,該進程也不能運行。
2)隊列:
就緒隊列、等待(阻塞)隊列
處於就緒狀態的進程,在調度程序爲之分配了處理機以後便開始執行,就緒 -> 執行。
正在執行的進程若是由於分配他的時間片已經用完,而被剝奪處理機,執行 -> 就緒。
若是由於某種緣由導致當前的進程受阻,使之不能執行,執行 -> 阻塞。
2.5 進程同步的幾種機制
1)同步機制須要遵循的原則
a. 空閒讓進
b. 忙則等待
c. 有限等待
d. 讓權等待
2)經典的進程同步問題:生產者-消費者問題;哲學家進餐問題;讀者-寫者問題(?)
3)進程的同步機制【?】
管程機制
信號量機制
硬件同步機制:
2.6 進程的通訊方式
進程通訊就是進程間的數據交換,PV操做是低級通訊方式,高級通訊方式是指以較高效率傳遞大量數據的通訊方式。
高級通訊方式能夠分爲:共享通訊、消息通訊、管道通訊。這三大類又可分爲:管道、命名管道、信號、消息隊列、共享內存、信號量以及套接字七小類,以下:
1)管道(pipe):
管道能夠用於具備親緣關係(指父子進程關係)進程中的通訊,容許一個進程和另外一個與它有共同祖先的進程之間通訊。是一種半雙工的通訊方式,數據只能單向流動。
2)命名管道(named pipe):
命名管道克服了管道沒有名字的限制,所以它除了具備管道所具備的功能之外,還容許無親緣關係進程間的通訊,一樣也是半雙工的通訊方式。
3)信號(signal):
比較複雜,用於通知接受進程有某種事件發生,除了用於進程間通訊外,進程還能夠發送信號給進程自己。
4)消息(message)隊列:
消息隊列是由消息的鏈表,存放在內核中並由消息隊列標識符標識。它克服了信號傳遞信息少、管道只能承載無格式字節流以及緩衝區大小受限等缺點。
5)共享內存:
共享內存就是映射一段能被其餘進程所訪問的內存,這段共享內存由一個進程建立,但多個進程均可以訪問。使得多個進程能夠訪問同一塊內存空間,是最快的可用IPC形式,也是針對其餘進程間通訊方式運行效率低而專門設計的。
6)信號量(semaphore):
信號量是一個計數器,能夠用來控制多個進程對共享資源的訪問,常做爲一種鎖機制,防止某進程正在訪問共享資源時,其餘進程也訪問該資源。主要做爲進程間以及同一進程不一樣線程之間的同步手段。
7)套接字(socket):
更爲通常的進程間通訊機制,可用於不一樣機器之間的進程間通訊。
2.7 線程同步的方式
1)臨界區:
經過對多線程的串行化來訪問公共資源或者一段代碼,速度快,適合控制數據訪問
2)互斥量:
採用互斥對象機制,只有擁有互斥對象的線程纔有訪問公共資源的權限,由於互斥對象只有一個,因此能夠保證公共資源不會同時被多個線程訪問
3)信號量:
容許多個線程同一時刻訪問同一資源,可是須要限制同一時刻訪問此資源的最大線程數目
4)事件(信號):
經過通知操做的方式來保持多線程的同步,還能夠方便的實現多線程的優先級比較的操做