當前位置:生活全書館 >

綜合知識

> Linux下多程序和多執行緒的區別

Linux下多程序和多執行緒的區別

Linux下多程序和多執行緒的區別

1.區別:

2.1、多程序中資料共享複雜、同步簡單,而多執行緒中資料共享簡單、同步複雜;

3.2、多程序佔用記憶體多、切換複雜、速度慢、CPU利用率低,而多執行緒佔用記憶體少、切換簡單、CPU利用率高;

4.3、多程序的程式設計簡單、除錯簡單,而多執行緒的程式設計複雜、除錯複雜。

小編還為您整理了以下內容,可能對您也有幫助:

linux裡面,程序與執行緒到底有什麼本質的區別?

執行緒:是程序中執行的一條路徑,是系統排程的最小單位。

程序:是正在執行的程式,是系統分配資源的最小單位。

執行緒與程序關係

1.一個程序可以有多個執行緒,一個執行緒只能屬於一個程序。

2.同一個程序下的所有執行緒共享該程序下的所有資源。

3.真正在處理機上執行的是執行緒,不是程序,執行緒是程序內的一個執行單元,是程序內的可排程實體。

Linux執行緒與程序區別

程序:

優點:多程序可以同時利用多個CPU,能夠同時進行多個操作。

缺點:耗費資源(建立一個程序重新開闢記憶體空間)。

程序不是越多越好,一般程序個數等於cpu個數。

執行緒:

優點:共享記憶體,尤其是進行IO操作(網路、磁碟)的時候(IO操作很少用cpu),可以使用多執行緒執行併發操作。

缺點:搶佔資源。

Linux下多執行緒和多程序程式的優缺點,各個適合什麼樣的業務場景

多程序比較安全,因為預設情況下不同程序之間的記憶體是的(如果需要共享記憶體則需要進行程序間通訊)。而多執行緒下,記憶體是共享的,這時就比較危險了,你要自己使用鎖、訊號量等機制來解決記憶體塊的同時讀寫和同步等等。如果兩個功能沒有資料需要共享,或只有前後遞進關係,建議使用多程序。如果兩個功能需要同時對一塊資料進行處理(例如需要對資源進行建立和老化刪除),則需要使用多執行緒,這時可能需要使用鎖等機制來控制執行緒衝突。

多程序和多執行緒有什麼區別?

執行緒和程序都是現在電腦概念裡比較時髦的用語,什麼是多執行緒,什麼是多程序?本文詳細的給您介紹一下,希望能增進您對當代電腦技術的瞭解,有不到之處,還往高手予以更正。程序(英語:Process,中國譯作程序,臺灣譯作行程)是計算機中已執行程式的實體。程序本身不會執行,是執行緒的容器。程式本身只是指令的集合,程序才是程式(那些指令)的真正執行。若干程序有可能與同一個程式相關係,且每個程序皆可以同步(循序)或不同步(平行)的方式執行。程序為現今分時系統的基本運作單位

執行緒(英語:thread,臺灣譯為執行緒),作業系統技術中的術語,是作業系統能夠進行運算排程的最小單位。它被包涵在程序之中,一條執行緒指的是程序中一個單一順序的控制流,一個程序中可以併發多個執行緒,每條執行緒並行執行不同的任務。在Unix

System

V及SunOS中也被稱為輕量程序(lightweight

processes),但輕量程序更多指核心執行緒(kernel

thread),而把使用者執行緒(user

thread)稱為執行緒。

執行緒是排程和分派的基本單位。執行緒可以作業系統核心排程的核心執行緒,如Win32

執行緒;由使用者程序自行排程的使用者執行緒,如Linux

Portable

Thread;

或者由核心與使用者程序,如Windows

7的執行緒,進行混合排程。

同一程序中的多條執行緒將共享該程序中的全部系統資源,如虛擬地址空間,檔案描述符和訊號處理等等。但同一程序中的多個執行緒有各自的呼叫棧(call

stack),自己的暫存器環境(register

context),自己的執行緒本地儲存(thread-local

storage)。

一個程序可以有很多執行緒,每條執行緒並行執行不同的任務。

在多核或多CPU,或支援Hyper-threading的CPU上使用多執行緒程式設計的好處是顯而易見,即提高了程式的執行吞吐率。在單CPU單核的計算機上,使用多執行緒技術,也可以把程序中負責IO處理、人機互動而常備阻塞的部分與密集計算的部分分開來執行,編寫專門的workhorse執行緒執行密集計算,從而提高了程式的執行效率

程序是資源分配的最小單位,執行緒是CPU排程的最小單位。執行緒和程序的區別在於,子程序和父程序有不同的程式碼和資料空間,而多個執行緒則共享資料空間,每個執行緒有自己的執行堆疊和程式計數器為其執行上下文.多執行緒主要是為了節約CPU時間,發揮利用,根據具體情況而定.

執行緒的執行中需要使用計算機的記憶體資源和CPU。

多程序:

程序是程式在計算機上的一次執行活動。當你執行一個程式,你就啟動了一個程序。顯然,程式是死的(靜態的),程序是活的(動態的)。程序可以分為系統程序和使用者程序。凡是用於完成作業系統的各種功能的程序就是系統程序,它們就是處於執行狀態下的作業系統本身;所有由使用者啟動的程序都是使用者程序。程序是作業系統進行資源分配的單位。

程序又被細化為執行緒,也就是一個程序下有多個能執行的更小的單位。在同一個時間裡,同一個計算機系統中如果允許兩個或兩個以上的程序處於執行狀態,這便是多工。現代的作業系統幾乎都是多工作業系統,能夠同時管理多個程序的執行。

多工帶來的好處是明顯的,比如你可以邊聽mp3邊上網,與此同時甚至可以將下載的文件打印出來,而這些任務之間絲毫不會相互干擾。那麼這裡就涉及到並行的問題,俗話說,一心不能二用,這對計算機也一樣,原則上一個CPU只能分配給一個程序,以便執行這個程序。我們通常使用的計算機中只有一個CPU,也就是說只有一顆心,要讓它一心多用,同時執行多個程序,就必須使用併發技術。實現併發技術相當複雜,最容易理解的是“時間片輪轉程序排程演算法”,它的思想簡單介紹如下:在作業系統的管理下,所有正在執行的程序輪流使用CPU,每個程序允許佔用CPU的時間非常短(比如10毫秒),這樣使用者根本感覺不出來

CPU是在輪流為多個程序服務,就好象所有的程序都在不間斷地執行一樣。但實際上在任何一個時間內有且僅有一個程序佔有CPU。

如果一臺計算機有多個CPU,情況就不同了,如果程序數小於CPU數,則不同的程序可以分配給不同的CPU來執行,這樣,多個程序就是真正同時執行的,這便是並行。但如果程序數大於CPU數,則仍然需要使用併發技術。

進行CPU分配是以執行緒為單位的,一個程序可能由多個執行緒組成,這時情況更加複雜,但簡單地說,有如下關係:

匯流排程數<=

CPU數量:並行執行

匯流排程數>

CPU數量:併發執行

並行執行的效率顯然高於併發執行,所以在多CPU的計算機中,多工的效率比較高。但是,如果在多CPU計算機中只執行一個程序(執行緒),就不能發揮多CPU的優勢。

這裡涉及到多工作業系統的問題,多工作業系統(如Windows)的基本原理是:作業系統將CPU的時間片分配給多個執行緒,每個執行緒在作業系統指定的時間片內完成(注意,這裡的多個執行緒是分屬於不同程序的).作業系統不斷的從一個執行緒的執行切換到另一個執行緒的執行,如此往復,巨集觀上看來,就好像是多個執行緒在一起執行.由於這多個執行緒分屬於不同的程序,因此在我們看來,就好像是多個程序在同時執行,這樣就實現了多工

多執行緒:在計算機程式設計中,一個基本的概念就是同時對多個任務加以控制。許多程式設計問題都要求程式能夠停下手頭的工作,改為處理其他一些問題,再返回主程序。可以通過多種途徑達到這個目的。最開始的時候,那些掌握機器低階語言的程式設計師編寫一些“中斷服務例程”,主程序的暫停是通過硬體級的中斷實現的。儘管這是一種有用的方法,但編出的程式很難移植,由此造成了另一類的代價高昂問題。中斷對那些實時性很強的任務來說是很有必要的。但對於其他許多問題,只要求將問題劃分進入執行的程式片斷中,使整個程式能更迅速地響應使用者的請求。

最開始,執行緒只是用於分配單個處理器的處理時間的一種工具。但假如作業系統本身支援多個處理器,那麼每個執行緒都可分配給一個不同的處理器,真正進入“並行運算”狀態。從程式設計語言的角度看,多執行緒操作最有價值的特性之一就是程式設計師不必關心到底使用了多少個處理器。程式在邏輯意義上被分割為數個執行緒;假如機器本身安裝了多個處理器,那麼程式會執行得更快,毋需作出任何特殊的調校。根據前面的論述,大家可能感覺執行緒處理非常簡單。但必須注意一個問題:共享資源!如果有多個執行緒同時執行,而且它們試圖訪問相同的資源,就會遇到一個問題。舉個例子來說,兩個執行緒不能將資訊同時傳送給一臺印表機。為解決這個問題,對那些可共享的資源來說(比如印表機),它們在使用期間必須進入鎖定狀態。所以一個執行緒可將資源鎖定,在完成了它的任務後,再解開(釋放)這個鎖,使其他執行緒可以接著使用同樣的資源。

多執行緒是為了同步完成多項任務,不是為了提高執行效率,而是為了提高資源使用效率來提高系統的效率。執行緒是在同一時間需要完成多項任務的時候實現的。

一個採用了多執行緒技術的應用程式可以更好地利用系統資源。其主要優勢在於充分利用了CPU的空閒時間片,可以用盡可能少的時間來對使用者的要求做出響應,使得程序的整體執行效率得到較大提高,同時增強了應用程式的靈活性。更為重要的是,由於同一程序的所有執行緒是共享同一記憶體,所以不需要特殊的資料傳送機制,不需要建立共享儲存區或共享檔案,從而使得不同任務之間的協調操作與執行、資料的互動、資源的分配等問題更加易於解決。

程序間通訊(IPC,Inter-Process

Communication),指至少兩個程序或執行緒間傳送資料或訊號的一些技術或方法。程序是計算機系統分配資源的最小單位。每個程序都有自己的一部分的系統資源,彼此是隔離的。為了能使不同的程序互相訪問資源並進行協調工作,才有了程序間通訊。這些程序可以執行在同一計算機上或網路連線的不同計算機上。

程序間通訊技術包括訊息傳遞、同步、共享記憶體和遠端過程呼叫。

程序和執行緒有什麼區別?

1、功能不同

程序是計算機中的程式關於某資料集合上的一次執行活動,是系統進行資源分配和排程的基本單位,是作業系統結構的基礎。

執行緒是作業系統能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。

2、工作原理不同

在早期面向程序設計的計算機結構中,程序是程式的基本執行實體;在當代面向執行緒設計的計算機結構中,程序是執行緒的容器。程式是指令、資料及其組織形式的描述,程序是程式的實體。

執行緒是排程和分派的基本單位。執行緒可以為作業系統核心排程的核心執行緒,如Win32執行緒;由使用者程序自行排程的使用者執行緒,如Linux平臺的POSIX Thread;或者由核心與使用者程序,如Windows 7的執行緒,進行混合排程。

3、作用不同

程序是作業系統中最基本、重要的概念。是多道程式系統出現後,為了刻畫系統內部出現的動態情況,描述系統內部各道程式的活動規律引進的一個概念,所有多道程式設計作業系統都建立在程序的基礎上。

通常在一個程序中可以包含若干個執行緒,它們可以利用程序所擁有的資源。在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為執行和排程的基本單位。

擴充套件資料

程序是由程序控制塊,程式段,資料段三部分組成。一個程序可以包含若干執行緒(Thread),執行緒可以幫助應用程式同時做幾件事(比如一個執行緒向磁碟寫入檔案,另一個則接收使用者的按鍵操作並及時做出反應,互相不干擾)。

在程式被執行後,系統首先要做的就是為該程式程序建立一個預設執行緒,然後程式可以根據需要自行新增或刪除相關的執行緒。是可併發執行的程式。

在一個數據集合上的執行過程,是系統進行資源分配和排程的一個單位,也是稱活動、路徑或任務,它有兩方面性質:活動性、併發性。

程序可以劃分為執行,阻塞,就緒三種狀態,並隨一定條件而相互轉化,就緒執行,執行阻塞,阻塞就緒。

程序為應用程式的執行例項,是應用程式的一次動態執行。看似高深,我們可以簡單地理解為:它是作業系統當前執行的執行程式。

在系統當前執行的執行程式裡包括:系統管理計算機個體和完成各種操作所必需的程式;使用者開啟、執行的額外程式,當然也包括使用者不知道,而自動執行的非法程式(它們就有可能是病毒程式)。

參考資料來源:百度百科-執行緒

參考資料來源:百度百科-程序

  • 文章版權屬於文章作者所有,轉載請註明 https://shqsg.com/zonghezhishi/v3kmoy.html