進程
- 1、進程的程序的一次執行
- 2、進程是一個程序及其數據在處理機上順序執行時所發生的活動
- 3、進程是具有獨立功能的程序在一個數據集合上運行的過程,他是系統進行資源分配的基本單位
進程的三個狀態
- 就緒(Ready)狀態:進程已經處於準備好的狀態,進程已經分配到了CPU以外的所有必要資源後,只要獲得CPU,便可立即運行。
- 執行(Running)狀態:進程已經獲得CPU,其程序正在執行狀態。
- 阻塞(Block)狀態:正在執行的進程由於發生某事(IO請求,申請緩衝區失敗)暫時無法繼續執行的狀態。
進程間通信方式
- 共享存儲器:相互通信的進程共享某些數據結構或者共享存儲區,進程之間能夠通過這些空間進行通信
- 管道pipe:是指用於連接一個讀進程和一個寫進程以及實現它們之間通信的一個共享文件,有名pipe文件,通過向管道中寫入或讀取大量數據(字符流)進行通信
- 消息傳遞系統:將通信的數據封裝在消息中,並利用操作系統提供的一組通信命令(原語),在進程之間實現傳遞消息
- 套接字:一個套接字,就是一個通信標識類型的數據結構,包含了通信目的地的地址,通信使用的端口號,通信網絡的傳輸協議,進程所在的網絡地址,以及以及針對客戶或服務器程序提供的不同系統調用(API函數)等,是進程通信和網絡通信的基本構建(Socket TCP協議,網絡套接字)
線程
一個進程可以包含多個線程,一個進程至少有一個線程,調度和派分的基本單位,線程可以利用進程所擁有的資源,由於線程比進程要小,基本上不擁有系統資源。故對它的調度所付出的開銷就會少很多,能更加高效地提高多個程序之間併發執行的程度。
進程與線程的區別
- 資源空間:進程有自己獨立的運行空間,獨立的資源,同一進程下的線程共享資源,空間
- 調度:進程爲資源分配的基本單位,線程爲調度的基本單位
多線程
在一個程序中,獨立運行的程序片段叫做“線程”(Thread)。多線程是爲了同步完成多項任務,不是爲了提高運行效率,而是爲了提高資源使用效率來提供系統的效率,線程是在同一時間需要完成多項任務的時候實現的。
同步
- 功能調用的時候,在沒有得到結果之前,該調用就不返回了,這時程序的阻塞的,只有接收到返回的值或者消息之後才往下執行其他命令。(一根筋)
異步
- 當一個異步過程調用發出後,調用者不能立即得到處理結果。實際處理這個調用的部件在完成後,通過狀態、通知和回調類通知調用者。
進程間同步
- 合作的併發進程需要按先後次序執行,具有直接的制約關係。例如:一個進程的執行依賴於合作進程的消息或信號。當一個進程沒有得到來自合作進程的消息或信號時需阻塞等待,直到消息或信號到達才喚醒。
進程間互斥
- 進程之間的間接制約關係。當一個進程進入了臨界區,使用臨界資源的時候,另一個進程就必須等待,只有當使用臨界資源的進程退出臨界區之後,這個進程纔會解除阻塞狀態。
相關概念:
- 臨界資源:操作系統中佔有資源的最最小單位是進程,對於某些資源來說,其在同一個時間內只能被一個進程所佔有,這種資源被稱爲臨界資源,對臨界資源的訪問必須是互斥進行的
- 臨界區:訪問臨界資源的代碼稱爲臨界區
- 信號量:進程之間傳遞信號的一個整數
併發
在多道程序設計系統中,進程會被交替執行,在宏觀上看可表現出一種併發的外部特徵
鎖死
多個進程全部阻塞,形成等待資源的循環鏈