進程與線程

首先,先弄明白何謂線程與進程:

1.先說說概念吧。

線程的上級,作業:用戶在一次解決問題或事務處理中,系統所要做的所有工作的集合就叫做作業,它是由一系列有序的步驟構成的。當然,一個作業是可以會有很多個不同的進程的,它包括用戶程序,所需要的數據集合控制命令等。
進程:程序在處理數據集的一次運行過程,它是操作系統資源分配的基本單位。
線程:是線程執行的一個實體,是被操作系統獨立調度和執行的基本單位。

一個進程是可以有一個或多個線程的,最少得有一個線程。

換句話說:
作業是向計算機提交任務的任務實體。
進程是執行實體,是資源分配的基本單位。
線程是處理機調度的基本單位。

做個比喻:當用戶向某公司發起委託時,某老大就會接下委託,然後具體將工作分配給不同的團隊,再由個體團隊分配給每個人具體的工作。

這裏作業就可以形象的看作某老大,進程就可以看作不同的團隊,而線程就可以看作團隊
中的每個成員個體。

2.進程有哪些特性呢?

動態性:進程是程序在多道程序系統中的一次執行過程,進程是動態產生,動態消亡的。
  併發性:任何進程都可以同其他進程一起併發執行
  獨立性:進程是一個能獨立運行的基本單位,同時也是系統分配資源和調度的獨立單位;
  異步性:由於進程間的相互制約,使進程具有執行的間斷性,即進程按各自獨立的、不可預知的速度向前推進。

  多個不同的進程可以包含相同的程序,一個程序在不同的數據集裏就構成不同的進程,能得到不同的結果;但是執行過程中,程序不能發生改變。
  

3.線程的特徵

  • 線程的執行狀態包括運行、就緒和等待。
  • 進程中的所有線程共享所屬進程內的主存和其他資源。
  • 擁有自己的線程控制塊和執行棧,寄存器。

4.進程和線程有哪些區別呢?

  • 子進程和父進程是有着不同的代碼和數據空間的,而多線程則是共享的數據空間。
  • 一個進程中可以包含多個線程,且他們可以利用線程所擁有的資源,而每個線程都是有自己的執行堆棧和程序計數器爲其執行上下文的。
  • 在引入線程的操作系統中,通常都是把進程作爲分配資源的基本單位,而把線程作爲獨立運行和獨立調度的基本單位。
  • 由於線程比進程更小,基本上不擁有系統資源,故對它的調度所付出的開銷就會小得多,能更高效的提高系統內多個程序間併發執行的程度,從而顯著提高系統資源的利用率和吞吐量。
  • 多線程主要是爲了節約CPU時間,發揮利用,根據具體情況而定。線程的運行中需要使用計算機的內存資源和CPU。

5.進程五個狀態模型

創建狀態:一個進程正在被創建,還沒被轉到就緒狀態之前的狀態。
運行狀態:當一個進程正在處理機上運行時。
就緒狀態:一個進程獲得了除處理機之外的一切所需資源,一旦得到處理機即可運行.
阻塞狀態:一個進程正在等待某一事件而暫停運行時。如等待某資源,等待輸入/輸出完成。
結束狀態:一個進程正在從系統中消失時的狀態,這是因爲進程結束或由於其他原因所導致。

關係附圖如下:
這裏寫圖片描述

6.進程間通信的方式有幾種呢?

用於進程間通訊的四種不同技術: 共享內存,臨界區,管道,消息。

具體內容如下:

  • 消息傳遞(管道,FIFO,posix和system v消息隊列)
  • 同步(互斥鎖,條件變量,讀寫鎖,文件和記錄鎖,Posix和System V信號燈)
  • 共享內存區(匿名共享內存區,有名Posix共享內存區,有名System V共享內存區)
  • 過程調用(Solaris門,Sun RPC)

    其中過程調用又包括如下方法:

(1)管道:管道可用於具有親緣關係進程間的通信,允許一個進程和另一個與它有共同祖先的進程之間進行通信。

(2)命名管道:命名管道克服了管道沒有名字的限制,因此,除具有管道所具有的功能外,它還允許無親緣關係進程間的通信。

(3)信號:信號是比較複雜的通信方式,用於通知接受進程有某種事件發生,除了用於進程間通信外,進程還可以發送信號給進程本身;Linux除了支持Unix早期信號語義函數sigal外,還支持語義符合Posix.1標準的信號函數sigaction。

(4)消息隊列:消息隊列是消息的鏈接表,包括Posix消息隊列system V消息隊列。有足夠權限的進程可以向隊列中添加消息,被賦予讀權限的進程則可以讀走隊列中的消息。消息隊列克服了信號承載信息量少,管道只能承載無格式字節流以及緩衝區大小受限等缺點。

(5)共享內存:使得多個進程可以訪問同一塊內存空間,是最快的可用IPC形式。是針對其他通信機制運行效率較低而設計的。往往與其它通信機制,如信號量結合使用,來達到進程間的同步及互斥。

(6)內存映射:內存映射允許任何多個進程間通信,每一個使用該機制的進程通過把一個共享的文件映射到自己的進程地址空間來實現它。

(7)信號量:主要作爲進程間以及同一進程不同線程之間的同步手段。

(8)套接口(Socket):更爲一般的進程間通信機制,可用於不同機器之間的進程間通信。

發佈了56 篇原創文章 · 獲贊 104 · 訪問量 12萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章