1. 程式人生 > >程序與執行緒的區別和聯絡

程序與執行緒的區別和聯絡

程序概念

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

在Mac、Windows NT等採用微核心結構的作業系統中,程序的功能發生了變化:它只是資源分配的單位,而不再是排程執行的單位。在微核心系統中,真正排程執行的基本單位是執行緒。因此,實現併發功能的單位是執行緒。

執行緒概念

  執行緒是程序中執行運算的最小單位,亦即執行處理機排程的基本單位。如果把程序理解為在邏輯上作業系統所完成的任務,那麼執行緒表示完成該任務的許多可能的子任務之一。例如,假設使用者啟動了一個視窗中的資料庫應用程式,作業系統就將對資料庫的呼叫表示為一個程序。假設使用者要從資料庫中產生一份工資單報表,並傳到一個檔案中,這是一個子任務;在產生工資單報表的過程中,使用者又可以輸人資料庫查詢請求,這又是一個子任務。這樣,作業系統則把每一個請求――工資單報表和新輸人的資料查詢表示為資料庫程序中的獨立的執行緒。執行緒可以在處理器上獨立排程執行,這樣,在多處理器環境下就允許幾個執行緒各自在單獨處理器上進行。作業系統提供執行緒就是為了方便而有效地實現這種併發性

引入執行緒的好處

(1)易於排程。

(2)提高併發性。通過執行緒可方便有效地實現併發性。程序可建立多個執行緒來執行同一程式的不同部分。

(3)開銷少。建立執行緒比建立程序要快,所需開銷很少。。

(4)利於充分發揮多處理器的功能。通過建立多執行緒程序(即一個程序可具有兩個或更多個執行緒),每個執行緒在一個處理器上執行,從而實現應用程式的併發性,使每個處理器都得到充分執行。

程序和執行緒的關係

(1)一個執行緒只能屬於一個程序,而一個程序可以有多個執行緒,但至少有一個執行緒。執行緒是作業系統可識別的最小執行和排程單位。

(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。 同一程序中的多個執行緒共享程式碼段(程式碼和常量),資料段(全域性變數和靜態變數),擴充套件段(堆儲存)。但是每個執行緒擁有自己的棧段,棧段又叫執行時段,用來存放所有區域性變數和臨時變數。

(3)處理機分給執行緒,即真正在處理機上執行的是執行緒。

(4)執行緒在執行過程中,需要協作同步。不同程序的執行緒間要利用訊息通訊的辦法實現同步。

處理機管理是作業系統的基本管理功能之一,它所關心的是處理機的分配問題。也就是說把CPU(中央處理機)的使用權分給某個程式,通常把這個正準備進入記憶體的程式稱為作業,當這個作業進入記憶體後我們把它稱為程序。

自從60年代提出程序概念,在作業系統中一直都是以程序作為能獨立執行的基本單位的。直到80年代中期,人們又提出了比程序更小的能獨立執行的基本單位 ——執行緒;試圖用它來提高系統內程式併發執行的速度,從而可進一步提高系統的吞吐量。近幾年,執行緒概念已得到了廣泛應用,不僅在新推出的作業系統中,大多 都已引入了執行緒概念,而且在新推出的資料庫管理系統和其它應用軟體中,也都紛紛引入了執行緒,來改善系統的效能。

如果說,在作業系統中引入程序的目的,是為了使多個程式併發執行,以改善資源利用率及提高系統的吞吐量;那麼,在作業系統中再引入執行緒則是為了減少程式並 發執行時所付出的時空開銷,使作業系統具有更好的併發性。為了說明這一點,我們首先回顧程序的兩個基本屬性:

(1)程序是一個可擁有資源的獨立單位;

(2)程序同時又是——個可以獨立排程和分派的基本單位。正是由於程序具有這兩個基本屬性,才使之成為一個能獨立執行的基本單位,從而也就構成了程序併發執行的基礎。

然而為使程式能併發執行,系統還必須進行以下的一系列操作:

(1)建立程序。系統在建立程序時,必須為之分配其所必需的、除處理機以外的所有資源。如記憶體空間、I/0裝置以及建立相應的PCB。

(2)撤消程序。系統在撤消程序時,又必須先對這些資源進行回收操作,然後再撤消PCB。

(3)程序切換。在對程序進行切換時,由於要保留當前程序的CPU環境和設定新選中程序的CPU環境,為此需花費不少處理機時間。

簡言之,由於程序是一個資源擁有者,因而在程序的建立、撤消和切換中,系統必須為之付出較大的時空開銷。也正因為如此,在系統中所設定的程序數目不宜過多,程序切換的頻率也不宜太高,但這也就限制了併發程度的進一步提高。

如何能使多個程式更好地併發執行,同時又儘量減少系統的開銷,已成為近年來設計作業系統時所追求的重要目標。於是,有不少作業系統的學者們想到,可否將進 程的上述屬性分開,由作業系統分開來進行處理。即對作為排程和分派的基本單位,不同時作為獨立分配資源的單位,以使之輕裝執行;而對擁有資源的基本單位, 又不頻繁地對之進行切換。正是在這種思想的指導下,產生了執行緒概念。

在引入執行緒的作業系統中,執行緒是程序中的一個實體,是被系統獨立排程和分派的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源 (如程式計數器、一組暫存器和棧),但它可與同屬一個程序的其它執行緒共享程序所擁有的全部資源。一個執行緒可以建立和撤消另一個執行緒;同一程序中的多個執行緒 之間可以併發執行。由於執行緒之間的相互制約,致使執行緒在執行中也呈現出間斷性。相應地,執行緒也同樣有就緒、阻塞和執行三種基本狀態,有的系統中執行緒還有終 止狀態。

執行緒與程序的比較

執行緒具有許多傳統程序所具有的特徵,故又稱為輕型程序(Light—Weight Process)或程序元;而把傳統的程序稱為重型程序(Heavy—Weight Process),它相當於只有一個執行緒的任務。在引入了執行緒的作業系統中,通常一個程序都有若干個執行緒,至少需要一個執行緒。下面,我們從排程、併發性、 系統開銷、擁有資源等方面,來比較執行緒與程序。

1.排程

在傳統的作業系統中,擁有資源的基本單位和獨立排程、分派的基本單位都是程序。而在引入執行緒的作業系統中,則把執行緒作為排程和分派的基本單位。而把程序作 為資源擁有的基本單位,使傳統程序的兩個屬性分開,執行緒便能輕裝執行,從而可顯著地提高系統的併發程度。在同一程序中,執行緒的切換不會引起程序的切換,在 由一個程序中的執行緒切換到另一個程序中的執行緒時,將會引起程序的切換。

2.併發性

在引入執行緒的作業系統中,不僅程序之間可以併發執行,而且在一個程序中的多個執行緒之間,亦可併發執行,因而使作業系統具有更好的併發性,從而能更有效地使 用系統資源和提高系統吞吐量。例如,在一個未引入執行緒的單CPU作業系統中,若僅設定一個檔案服務程序,當它由於某種原因而被阻塞時,便沒有其它的檔案服 務程序來提供服務。在引入了執行緒的作業系統中,可以在一個檔案服務程序中,設定多個服務執行緒,當第一個執行緒等待時,檔案服務程序中的第二個執行緒可以繼續運 行;當第二個執行緒阻塞時,第三個執行緒可以繼續執行,從而顯著地提高了檔案服務的質量以及系統吞吐量。

3.擁有資源

不論是傳統的作業系統,還是設有執行緒的作業系統,程序都是擁有資源的一個獨立單位,它可以擁有自己的資源。一般地說,執行緒自己不擁有系統資源(也有一點必 不可少的資源),但它可以訪問其隸屬程序的資源。亦即,一個程序的程式碼段、資料段以及系統資源,如已開啟的檔案、I/O裝置等,可供問一程序的其它所有線 程共享。

4.系統開銷

由於在建立或撤消程序時,系統都要為之分配或回收資源,如記憶體空間、I/o裝置等。因此,作業系統所付出的開銷將顯著地大於在建立或撤消執行緒時的開銷。類 似地,在進行程序切換時,涉及到整個當前程序CPU環境的儲存以及新被排程執行的程序的CPU環境的設定。而執行緒切換隻須儲存和設定少量暫存器的內容,並 不涉及儲存器管理方面的操作。可見,程序切換的開銷也遠大於執行緒切換的開銷。此外,由於同一程序中的多個執行緒具有相同的地址空間,致使它們之間的同步和通訊的實現,也變得比較容易。在有的系統中,執行緒的切換、同步和通訊都無須

相關推薦

程序執行理解關係

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

Android程序執行區別

 程序,常被定義為程式的執行,可以把一個程序看成一個獨立的程式,在記憶體中有其完備的資料空間和程式碼空間。一個程序所擁有的資料和變數只屬於他自己。          執行緒,某一程序中一路單獨執行的程式。也就是執行緒存在於程序之中,一個程序由一個或多個執行緒構成,各執行

程序執行區別聯絡以及優缺點

什麼是執行緒? -在一個程式裡的一個執行路線就叫做執行緒。更準確的定義是:執行緒是“一個程序內部的控制序列”。 -一切程序至少都有一個執行執行緒 -執行緒也被叫做輕量級程序 什麼是程序? -程序是程式的一個執行的例項。 -程序是正在執行的程式。 -程序是能分配處理器並由處

程序執行區別聯絡

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

程序執行區別聯絡程序執行的通訊方式.md

一、為什麼引入程序? 程序是為了提高CPU的執行效率,減少因為程式等待帶來的CPU空轉以及其他計算機軟硬體資源的浪費而提出來的。 二、為什麼引入執行緒? 為了減少程序切換和建立的開銷,提高執行效率和節省

執行的那些事兒(2)-- 程序執行區別聯絡

  在進行多執行緒程式設計之前我們先解決一個基本問題:什麼是執行緒、什麼是程序,他們之間有什麼區別與聯絡。 (1)程序:執行環境                   執行緒:執行單位         用書面一點的知說,程序是一個計算機中程式執行的一個實體,執行緒是作業系

執行中FutureFutureTask的區別聯絡

4.2 使用Callable+FutureTask獲取執行結果 package com.zejian.Executor; import java.util.concurrent.ExecutorService; import java.util.concurrent.Execut

程序執行的總結區別

對於程序和執行緒的區別,很多面試或者筆試都有涉及到。我想很多朋友跟我一樣,對他們都僅限於一些很粗很廣的定義和區分,對於很多細節一下子回答出來還是有一定難度的。下面我將對程序和執行緒做一個系統的總結,供大家參考。如文中有不妥的地方,歡迎大家指正。  一、概念上區分 程式:

程序執行區別聯絡

這兩天學習作業系統,發現程序跟執行緒真的有很複雜的關係,下面我就程序與執行緒的聯絡及區別總結一下學習到的。 概念: 程序:程序是一個具有獨立功能的程式關於某個資料集合的一次執行活動。程序是擁有資源和獨立排程的基本單位,程序是一個可擁有資源的獨立單位,程序能夠獨立執行。引入程

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

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

程序執行的簡單區別

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

Linux程序執行區別 詳細總結

首先,簡要了解一下程序和執行緒。對於作業系統而言,程序是核心之核心,整個現代作業系統的根本,就是以程序為單位在執行任務。系統的管理架構也是基於程序層面的。在按下電源鍵之後,計算機就開始了複雜的啟動過程,此處有一個經典問題:當按下電源鍵之後,計算機如何把自己由靜止啟動起來的?本

作業系統——程序執行區別以及如何選擇

1.定義 在對執行緒和程序進行比較之前,我們先看一下它們的定義。 程序:是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的一個獨立單位,是資源分配的最小單位。 執行緒:是程序的一個實體,是CPU排程和分派的基本單位,它是比程序更小的

Java多執行的實現(程序執行的概念、Java繼承Thread類實現多執行、Java實現Runnable介面實現多執行、ThreadRunnable的區別、實現Callable介面實現多執行

1 程序與執行緒 1.1 程序與執行緒的概念 什麼是程序?   程序: 作業系統中一個程式的執行週期。(比如我們想要在電腦上登入QQ,從雙擊qq按鈕---->關閉qq這個過程就是一個程序)   多程序: 同一時刻跑多個程式。   在DOS(磁碟作業系統時

001.多執行-程序執行區別

什麼是程序?顧名思義,就是進行中的程式,也就是執行中的程式。我們開啟電腦的工作管理員可以看到: 此時,執行中的360瀏覽器,Google瀏覽器等都是獨立的一個程序,他們擁有相應的系統資源,比如:CPU

程序執行區別

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

程序執行之間的區別

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

Linux中程序執行的概念以及區別

linux程序與執行緒的區別,早已成為IT界經常討論但熱度不減的話題。無論你是初級程式設計師,還是資深專家,都應該考慮過這個問題,只是層次角度不同罷了。對於一般的程式設計師,搞清楚二者的概念並在工作中學會運用是其思考的主要問題;對於資深工程師,如何在系統層面實現兩種技術及其各自的效能和實現代價是其思考的主要問

程序執行的關係區別

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

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

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