一、說說概念
1、程序(process)
狹義定義:程序就是一段程式的執行過程。
廣義定義:程序是乙個程式關於某個資料集合的一次執行。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。
簡單的來講程序的概念主要有兩點:第一,程序是乙個實體。每乙個程序都有它自己的位址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的**;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。第二,程序是乙個「執行中的程式」。程式是乙個沒有生命的實體,只有處理器賦予程式生命時,它才能成為乙個活動的實體,我們稱其為程序。
程序狀態:程序有三個狀態,就緒、執行和阻塞。就緒狀態其實就是獲取了出cpu外的所有資源,只要處理器分配資源就可以馬上執行。就緒狀態有排隊序列什麼的,排隊原則不再贅述。執行態就是獲得了處理器分配的資源,程式開始執行。阻塞態,當程式條件不夠時候,需要等待條件滿足時候才能執行,如等待i/o操作時候,此刻的狀態就叫阻塞態。
2、程式
說起程序,就不得不說下程式。先看定義:程式是指令和資料的有序集合,其本身沒有任何執行的含義,是乙個靜態的概念。而程序則是在處理機上的一次執行過程,它是乙個動態的概念。這個不難理解,其實程序是包含程式的,程序的執行離不開程式,程序中的文字區域就是**區,也就是程式。
3、執行緒
通常在乙個程序中可以包含若干個執行緒,當然乙個程序中至少有乙個執行緒,不然沒有存在的意義。執行緒可以利用程序所擁有的資源,在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位,由於執行緒比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統多個程式間併發執行的程度。
4、多執行緒
在乙個程式中,這些獨立執行的程式片段叫作「執行緒」(thread),利用它程式設計的概念就叫作「多執行緒處理」。多執行緒是為了同步完成多項任務,不是為了提高執行效率,而是為了提高資源使用效率來提高系統的效率。執行緒是在同一時間需要完成多項任務的時候實現的。
最簡單的比喻多執行緒就像火車的每一節車廂,而程序則是火車。車廂離**車是無法跑動的,同理火車也不可能只有一節車廂。多執行緒的出現就是為了提高效率。
二、說說區別
1、程序與執行緒的區別:
程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是乙個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。
1) 簡而言之,乙個程式至少有乙個程序,乙個程序至少有乙個執行緒.
2) 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。
3) 另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。
4) 執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。
5) 從邏輯角度來看,多執行緒的意義在於乙個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。
三、說說優缺點
執行緒和程序在使用上各有優缺點:執行緒執行開銷小,但不利於資源的管理和保護;而程序正相反。同時,執行緒適合於在smp(多核處理機)機器上執行,而程序則可以跨機器遷移。
四、總結
入職第一天閒的無聊,參考下別人的總結自己也簡單總結了下。知道以上的基本面試夠用了,至於程序、執行緒的細節,底層構成,排程等問題是作業系統的東西。我就不詳述了。
五、例項
1、多執行緒寫日誌,涉及到單例模式,非同步寫
一、說說概念
1、程序(process)
狹義定義:程序就是一段程式的執行過程。
廣義定義:程序是乙個程式關於某個資料集合的一次執行。它是作業系統動態執行的基本單元,在傳統的作業系統中,程序既是基本的分配單元,也是基本的執行單元。
簡單的來講程序的概念主要有兩點:第一,程序是乙個實體。每乙個程序都有它自己的位址空間,一般情況下,包括文字區域(text region)、資料區域(data region)和堆疊(stack region)。文字區域儲存處理器執行的**;資料區域儲存變數和程序執行期間使用的動態分配的記憶體;堆疊區域儲存著活動過程呼叫的指令和本地變數。第二,程序是乙個「執行中的程式」。程式是乙個沒有生命的實體,只有處理器賦予程式生命時,它才能成為乙個活動的實體,我們稱其為程序。
程序狀態:程序有三個狀態,就緒、執行和阻塞。就緒狀態其實就是獲取了出cpu外的所有資源,只要處理器分配資源就可以馬上執行。就緒狀態有排隊序列什麼的,排隊原則不再贅述。執行態就是獲得了處理器分配的資源,程式開始執行。阻塞態,當程式條件不夠時候,需要等待條件滿足時候才能執行,如等待i/o操作時候,此刻的狀態就叫阻塞態。
2、程式
說起程序,就不得不說下程式。先看定義:程式是指令和資料的有序集合,其本身沒有任何執行的含義,是乙個靜態的概念。而程序則是在處理機上的一次執行過程,它是乙個動態的概念。這個不難理解,其實程序是包含程式的,程序的執行離不開程式,程序中的文字區域就是**區,也就是程式。
3、執行緒
通常在乙個程序中可以包含若干個執行緒,當然乙個程序中至少有乙個執行緒,不然沒有存在的意義。執行緒可以利用程序所擁有的資源,在引入執行緒的作業系統中,通常都是把程序作為分配資源的基本單位,而把執行緒作為獨立執行和獨立排程的基本單位,由於執行緒比程序更小,基本上不擁有系統資源,故對它的排程所付出的開銷就會小得多,能更高效的提高系統多個程式間併發執行的程度。
4、多執行緒
在乙個程式中,這些獨立執行的程式片段叫作「執行緒」(thread),利用它程式設計的概念就叫作「多執行緒處理」。多執行緒是為了同步完成多項任務,不是為了提高執行效率,而是為了提高資源使用效率來提高系統的效率。執行緒是在同一時間需要完成多項任務的時候實現的。
最簡單的比喻多執行緒就像火車的每一節車廂,而程序則是火車。車廂離**車是無法跑動的,同理火車也不可能只有一節車廂。多執行緒的出現就是為了提高效率。
二、說說區別
1、程序與執行緒的區別:
程序和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是乙個程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。
1) 簡而言之,乙個程式至少有乙個程序,乙個程序至少有乙個執行緒.
2) 執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。
3) 另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。
4) 執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。
5) 從邏輯角度來看,多執行緒的意義在於乙個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。
三、說說優缺點
執行緒和程序在使用上各有優缺點:執行緒執行開銷小,但不利於資源的管理和保護;而程序正相反。同時,執行緒適合於在smp(多核處理機)機器上執行,而程序則可以跨機器遷移。
四、總結
入職第一天閒的無聊,參考下別人的總結自己也簡單總結了下。知道以上的基本面試夠用了,至於程序、執行緒的細節,底層構成,排程等問題是作業系統的東西。我就不詳述了。
五、例項
1、多執行緒寫日誌,涉及到單例模式,非同步寫
程序 執行緒 多執行緒相關總結第二(good)
這裡有一段知乎上的解釋 看見上面幾位的回答我真的是醉了。說幾句我的理解。首先來一句概括的總論 程序和執行緒都是乙個時間段的描述,是cpu工作時間段的描述。乙個最最基礎的事實 cpu太快,太快,太快了,暫存器僅僅能夠追的上他的腳步,ram和別的掛在各匯流排上的裝置完全是望其項背。那當多個任務要執行的時...
執行緒與程序相關1 執行緒與多執行緒
1.2.1 概念理解 1.2.2 執行緒的狀態1.3.1 標準庫threading python中的執行緒開發使用標準庫threading,程序靠執行緒執行 至少有乙個主線程,其他執行緒是工作執行緒,主線程是第乙個啟動的執行緒,即從上到下 執行的那個執行緒,工作執行緒是在主線程執行的基礎上進行分支並...
程序 執行緒 多執行緒
程序是系統中正在執行的乙個程式,程式一旦執行就是程序。程序可以看成程式執行的乙個例項。程序是系統資源分配的獨立實體,每個程序都擁有獨立的位址空間。乙個程序無法訪問另乙個程序的變數和資料結構,如果想讓乙個程序訪問另乙個程序的資源,需要使用程序間通訊,比如管道,檔案,套接字等。乙個程序可以擁有多個執行緒...