咱們的操做系統裏面會有不少應用,好比手機裏面的各類應用,每個應用都有一個或多個進程,並且每一個應用運行時又會用到不少不一樣的資源。進程就幫助咱們隔離了不一樣的資源,利用各類資源幫助應用管理着各類狀態,所以,咱們常常說進程是資源分配的最小單位。多線程
多進程的目的是爲了知足用戶的須要,同時對多個資源進行處理,簡單來講就是同時作多個事情。併發
進程擁有了資源以後,就須要去利用它們,因此就須要線程的幫忙了,每一個進程都至少須要一個線程做爲執行單位,同時也能夠開啓新的線程執行。另外,一個 CPU 核心一個時刻只能運行一個線程,多個線程之間須要不斷進行調度,所以咱們常常說線程是CPU調度的最小單位工具
有了線程以後,進程間能夠併發,並且一個進程內部的多個線程之間也是能夠併發的。操作系統
而多線程的目的就是爲了充分利用併發帶來的效率上的提升。線程
對於一個 CPU 核心,一個時刻只能運行一個線程(所以也只能運行一個進程),爲了實現併發運行,引入了分時的概念,即將時間分爲多個時間片,不一樣的時間片執行不一樣的線程,以實現一個時間段內運行多個線程cdn
進程正在 CPU 上運行,對於 CPU 的單個核心來講,一個時刻最多隻能有一個進程處於運行狀態blog
→ 就緒態:當分派給當前進程的時間片用完之後,該進程就必須讓出 CPU,變回就緒態等待下一次進程調度分派時間片;或者,若是是可剝奪的操做系統,有更高優先級的進程進入就緒態時,也須要讓出 CPU接口
→ 阻塞態:當進程請求某一資源(如外設)的使用和分配或等待某一事件的發生(如I/O操做的完成)時,它就從運行狀態轉換爲阻塞狀態。隊列
準備運行,已經得到了出 CPU 之外的全部須要的資源,等待 CPU 分派時間片進程
→ 運行態:當前進程被分派了 CPU 時間片後,也就得到 CPU 資源(分派處理機時間片),可使用 CPU 了,於是進入運行態
由於要等待某個資源或者某個事件的發生而被阻塞所以暫停運行。
就緒狀態是指進程缺乏 CPU 資源;而等待狀態是指須要除了 CPU 之外的其餘資源或者某個事件
→ 就緒態:當進程等待的事件到來時,如I/O操做結束或中斷結束,或者得到了等待的資源,中斷處理程序就會把該進程的狀態轉換爲就緒狀態
一種低級的通訊方式。在操做系統這種多線程,多進程環境中,咱們要密切關注資源的同步互斥問題
爲了解決共享資源的同步互斥問題,咱們將具體的資源的數量抽象爲信號量 Semaphore,經過 P 操做和 V 操做分別對信號量進行減和增。
若是咱們將信號量看做爲資源設置的資源鎖,那麼 P 操做至關於加鎖操做,而 V 操做至關於解鎖操做 。
隨着操做系統的發展,用於進程之間實現通訊的機制也在發展,並已由早期的低級進程通訊機制發展爲能傳送大量數據的高級通訊工具機制。
在通訊的進程之間存在一塊可直接訪問的共享空間,經過對這片共享空間進行寫/讀操做實現進程之間的信息交換。
固然,在對共享空間進行寫讀操做時,也須要使用同步互斥工具(如 P操做、V操做),對共享空間的寫讀進行控制。
通訊的進程之間不存在可直接訪問的共享空間,則必須利用操做系統提供的消息傳遞方法實現進程通訊。
利用一個「管道」實現進程間的通訊。這個管道是一個鏈接讀進程和寫進程的共享文件。
寫進程以字符流的方式將數據輸入到這個共享文件中,供讀進程讀取。固然這一系列操做也須要管道提供同步和互斥的能力。