1. 程式人生 > >程序與執行緒的關係與區別

程序與執行緒的關係與區別

程序,是併發執行的程式在執行過程中分配和管理資源的基本單位,是一個動態概念,竟爭計算機系統資源的基本單位。每一個程序都有一個自己的地址空間,即程序空間或(虛空間)。程序空間的大小 只與處理機的位數有關,一個 16 位長處理機的程序空間大小為 216 ,而 32 位處理機的程序空間大小為 232 。程序至少有 5 種基本狀態,它們是:初始態,執行態,等待狀態,就緒狀態,終止狀態。

    執行緒,在網路或多使用者環境下,一個伺服器通常需要接收大量且不確定數量使用者的併發請求,為每一個請求都建立一個程序顯然是行不通的,——無論是從系統資源開銷方面或是響應使用者請求的效率方面來看。因此,作業系統中執行緒的概念便被引進了。執行緒,是程序的一部分,一個沒有執行緒的程序可以被看作是單執行緒的。執行緒有時又被稱為輕權程序或輕量級程序,也是 CPU 排程的一個基本單位。

    說到這裡,我們對程序與執行緒都有了一個大體上的印象,現在開始說說二者大致的區別。

    程序的執行過程是線狀的,儘管中間會發生中斷或暫停,但該程序所擁有的資源只為該線狀執行過程服務。一旦發生程序上下文切換,這些資源都是要被保護起來的。這是程序巨集觀上的執行過程。而程序又可有單執行緒程序與多執行緒程序兩種。我們知道,程序有 一個程序控制塊 PCB ,相關程式段 和 該程式段對其進行操作的資料結構集 這三部分,單執行緒程序的執行過程在巨集觀上是線性的,微觀上也只有單一的執行過程;而多執行緒程序在巨集觀上的執行過程同樣為線性的,但微觀上卻可以有多個執行操作(執行緒),如不同程式碼片段以及相關的資料結構集。執行緒的改變只代表了 CPU 執行過程的改變,而沒有發生程序所擁有的資源變化。

出了 CPU 之外,計算機內的軟硬體資源的分配與執行緒無關,執行緒只能共享它所屬程序的資源。與程序控制表和 PCB 相似,每個執行緒也有自己的執行緒控制表 TCB ,而這個 TCB 中所儲存的執行緒狀態資訊則要比 PCB 表少得多,這些資訊主要是相關指標用堆疊(系統棧和使用者棧),暫存器中的狀態資料。程序擁有一個完整的虛擬地址空間,不依賴於執行緒而獨立存在;反之,執行緒是程序的一部分,沒有自己的地址空間,與程序內的其他執行緒一起共享分配給該程序的所有資源

    執行緒可以有效地提高系統的執行效率,但並不是在所有計算機系統中都是適用的,如某些很少做程序排程和切換的實時系統。使用執行緒的好處是有多個任務需要處理機處理時,減少處理機的切換時間;而且,執行緒的建立和結束所需要的系統開銷也比程序的建立和結束要小得多。最適用使用執行緒的系統是多處理機系統和網路系統或分散式系統。

----------------------------------

1. 執行緒的執行特性。

    執行緒只有 3 個基本狀態:就緒,執行,阻塞。

    執行緒存在 5 種基本操作來切換執行緒的狀態:派生,阻塞,啟用,排程,結束。

2. 程序通訊。

    單機系統中程序通訊有 4 種形式:主從式,會話式,訊息或郵箱機制,共享儲存區方式。

        主從式典型例子:終端控制程序和終端程序。

        會話式典型例子:使用者程序與磁碟管理程序之間的通訊。

相關推薦

程序執行關係區別

1.定義 程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動;程序是系統進行資源分配和排程的一個獨立單位。 執行緒是程序的一個實體,是CPU排程和分派的基本單位;它是比程序更小的能獨立執行的基本單位;同屬一個程序的不同執行緒之間共享程序所擁有的全部資源。 一個

程序執行的簡單區別

我自己理解的程序與執行緒的區別: 1.子程序之間相對獨立,除了彼此間的通訊,幾乎不會影響到對方, 就像每個人在自己單獨的房間裡辦公一樣。 2。子執行緒之間的交集比較大。 相對程序而言,執行緒是一個更加接近於執行體的概念, 它可以與同進程中的其他執行緒共享資料,但擁有自己的棧空間,擁有獨立的

程序執行的主要區別程序程式的主要區別

1.程序和執行緒的主要區別 根本區別:程序是作業系統資源分配的基本單位,而執行緒是任務排程和執行的基本單位 在開銷方面:每個程序都有獨立的程式碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;執行緒可以看做輕量級的程序,同一類執行緒共享程式碼和資料空間,每個執行緒

CIL鎖,GIL執行池的區別,程序池和執行池,同步非同步

一.GIL鎖 什麼是GIL? 全域性直譯器鎖,是加在直譯器上的互斥鎖 GC是python自帶的記憶體管理機制,GC的工作原理:python中的記憶體管理使用的是應用計數,每個數會被加上一個整型的計數器,表示這個資料被引用的次數,當這個整數變為0時則表示該資料已經沒有人使用,成為了垃圾資料,當記憶體佔用達到

程序執行之間的區別

我們在討論程序與執行緒的區別之前,首先我們要清楚程序與執行緒的概念。  什麼是程序? 程序是併發執行程式在執行過程中資源分配和管理的基本單位(資源分配的最小單位),是指令+資料+資源的一個集合。程序可以理解為程式的一次例項化,應用程式一旦執行,就是一個程序。每個程序都有自己獨立的地

【Linux程序排程】程序執行的本質區別

簡而言之,執行緒是程序的一部分,程序是程式的一部分。 異同: 1、程序是資源分配的基本單位,而執行緒是排程的基本單位; 2、程序與程序之間是獨立的,一個程序的異常終止不會影響其它程序,而執行緒與執行

Python——程序執行協程

程序 程序就是一個執行中的程式,是系統的資源分配和執行排程的一個基本單位。由於cpu的多工時間片輪轉工作機制,所以同一時刻內一個cpu核心只能有一個程序在執行。 linux下建立程序 import os print os.getpid  # 獲取當前程序id p

程式設計思想之多執行程序(2)——執行優先順序執行安全

《程式設計思想之多執行緒與多程序(1)——以作業系統的角度述說執行緒與程序》一文詳細講述了執行緒、程序的關係及在作業系統中的表現,這是多執行緒學習必須瞭解的基礎。本文將接著講一下執行緒優先順序和執行緒安全。 執行緒優先順序 現在主流作業系統(

程序執行獨佔共享的內容

來源自我的部落格 執行緒共享的內容包括: 程序 程式碼段 程序的公有資料(利用這些共享的資料,執行緒很容易的實現相互之間的通訊) 程序開啟的檔案描述符 訊號的處理器 程序的當前目錄 程序使用者

程序執行模型程序執行模型之爭

伺服器,事件 多程序單執行緒模型典型代表:nginx 單程序多執行緒模型典型代表:memcached 另外redis, mongodb也可以說是走的“多程序單執行緒模”模型(叢集),只不過作為資料庫伺服器,需要進行防寫,只提供了讀同步。 原因很簡單,因為伺服器的發展大部分都

任務、程序執行之間的區別

          任務(task)是最抽象的,是一個一般性的術語,指由軟體完成的一個活動。一個任務既可以是一個程序,也可以是一個執行緒。簡而

程序執行的主要區別(總結)

根本區別:程序是作業系統資源分配的基本單位,而執行緒是任務排程和執行的基本單位 在開銷方面:每個程序都有獨立的程式碼和資料空間(程式上下文),程式之間的切換會有較大的開銷;執行緒可以看做輕量級的程序,同一類執行緒共享程式碼和資料空間,每個執行緒都有自己獨立的執行棧和程式計數

Linux程序執行關係淺析 (轉載)

  程序概念   程序是表示資源分配的基本單位,又是排程執行的基本單位。例如,使用者執行自己的程式,系統就建立一個程序,併為它分配資源,包括各種表格、記憶體空間、磁碟空間、I/O裝置等。然後,把該程序放人程序的就緒佇列。程序排程程式選中它,為它分配CPU以及其它有關資源,該程序才真正執行。所以,

Android 程序執行關係

簡單介紹一下,程序和執行緒的關係。 Processes and Threads 程序和執行緒之間的關係. 一個程序裡面可以有多個執行緒. 程序如果掛了, 執行緒就沒了 程序優先順序 Foreground process 前臺程序 優先級

Python中程序執行的總體區別

  Num01–>執行緒   執行緒是作業系統中能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。   一個執行緒指的是程序中一個單一順序的控制流。   一個程序中可以併發多條執行緒,每條執行緒並行執行不同的任務。   Num02–>程序

程序執行關係區別

程序,是併發執行的程式在執行過程中分配和管理資源的基本單位,是一個動態概念,竟爭計算機系統資源的基本單位。每一個程序都有一個自己的地址空間,即程序空間或(虛空間)。程序空間的大小 只與處理機的位數有關,一個 16 位長處理機的程序空間大小為 216 ,而 32 位處理機

程序執行關係區別

1、定義   程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位。   執行緒是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位,執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可

程序間,執行間的通訊方式及程序執行區別

近日想總結下程序間,執行緒間的通訊方式,在網上搜索了下,感覺寫的很好,照搬過來,當做加深記憶。 幾種程序間的通訊方式 (1) 管道(pipe):管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有血緣關係的程序間使用。程序的血緣關係通常指父子程序關係。 (2)有名管道(named p

程序執行理解和關係

程序 執行緒的含義 程序就是一個程式在一個數據集上的一次動態執行過程。 程序一般由程式、資料集、程序控制塊三部分組成。我們編寫的程式用來描述程序要完成哪些功能以及如何完成;資料集則是程式在執行過程中所需要使用的資源;程序控制塊用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以利用它

【Linux】多程序執行之間的區別

http://blog.csdn.net/byrsongqq/article/details/6339240 網路程式設計中設計併發伺服器,使用多程序與多執行緒 ,請問有什麼區別?  答案一: 1,程序:子程序是父程序的複製品。子程序獲得父程序資料空間、堆和棧的複製品。 2,執行緒:相