程序與執行緒的區別 程序的通訊方式 執行緒的通訊方式

2022-03-20 14:40:42 字數 4537 閱讀 5305

**:

程序與執行緒的區別:

通俗的解釋

乙個系統執行著很多程序,可以比喻為一條馬路上有很多馬車

不同的程序可以理解為不同的馬車

而同一輛馬車可以有很多匹馬來拉--這些馬就是執行緒

假設道路的寬度恰好可以通過一輛馬車

道路可以認為是臨界資源

那麼馬車成為分配資源的最小單位(程序)

而同乙個馬車被很多匹馬驅動(執行緒)--即最小的執行單位

每輛馬車馬匹數=1

所以馬匹數=1的時候程序和執行緒沒有嚴格界限,只存在乙個概念上的區分度

馬匹數1的時候才可以嚴格區分程序和執行緒

專業的解釋

簡而言之,乙個程式至少有乙個程序,乙個程序至少有乙個執行緒.

執行緒的劃分尺度小於程序,使得多執行緒程式的併發性高。另外,程序在執行過程中擁有獨立的記憶體單元,而多個執行緒共享記憶體,從而極大地提高了程式的執行效率。

執行緒在執行過程中與程序還是有區別的。每個獨立的執行緒有乙個程式執行的入口、順序執行序列和程式的出口。但是執行緒不能夠獨立執行,必須依存在應用程式中,由應用程式提供多個執行緒執行控制。

從邏輯角度來看,多執行緒的意義在於乙個應用程式中,有多個執行部分可以同時執行。但作業系統並沒有將多個執行緒看做多個獨立的應用,來實現程序的排程和管理以及資源分配。這就是程序和執行緒的重要區別。

程序是具有一定獨立功能的程式關於某個資料集合上的一次執行活動,程序是系統進行資源分配和排程的乙個獨立單位.

執行緒是程序的乙個實體,是cpu排程和分派的基本單位,它是比程序更小的能獨立執行的基本單位.執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源(如程式計數器,一組暫存器和棧),但是它可與同屬乙個程序的其他的執行緒共享程序所擁有的全部資源.

乙個執行緒可以建立和撤銷另乙個執行緒;同乙個程序中的多個執行緒之間可以併發執行

進 程和執行緒的主要差別在於它們是不同的作業系統資源管理方式。程序有獨立的位址空間,乙個程序崩潰後,在保護模式下不會對其它程序產生影響,而執行緒只是乙個 程序中的不同執行路徑。執行緒有自己的堆疊和區域性變數,但執行緒之間沒有單獨的位址空間,乙個執行緒死掉就等於整個程序死掉,所以多程序的程式要比多執行緒的程式 健壯,但在程序切換時,耗費資源較大,效率要差一些。但對於一些要求同時進行並且又要共享某些變數的併發操作,只能用執行緒,不能用程序。如果有興趣深入的 話,我建議你們看看《現代作業系統》或者《作業系統的設計與實現》。對就個問題說得比較清楚。

+++程序概念

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

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

執行緒概念

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

引入執行緒的好處

(1)易於排程。

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

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

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

++程序和執行緒的關係:

(1)乙個執行緒只能屬於乙個程序,而乙個程序可以有多個執行緒,但至少有乙個執行緒。

(2)資源分配給程序,同一程序的所有執行緒共享該程序的所有資源。

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

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

執行緒是指程序內的乙個執行單元,也是程序內的可排程實體.

與程序的區別:

(1)排程:執行緒作為排程和分配的基本單位,程序作為擁有資源的基本單位

(2)併發性:不僅程序之間可以併發執行,同乙個程序的多個執行緒之間也可併發執行

(3)擁有資源:程序是擁有資源的乙個獨立單位,執行緒不擁有系統資源,但可以訪問隸屬於程序的資源.

(4)系統開銷:在建立或撤消程序時,由於系統都要為之分配和**資源,導致系統的開銷明顯大於建立或撤消執行緒時的開銷。+++

程序間的通訊方式:

1.管道(pipe)及有名管道(named pipe):

管道可用於具有親緣關係的父子程序間的通訊,有名管道除了具有管道所具有的功能外,它還允許無親緣關係程序間的通訊。

2.訊號(signal):

訊號是在軟體層次上對中斷機制的一種模擬,它是比較複雜的通訊方式,用於通知程序有某事件發生,乙個程序收到乙個訊號與處理器收到乙個中斷請求效果上可以說是一致的。

3.訊息佇列(message queue):

訊息佇列是訊息的鏈結表,它克服了上兩種通訊方式中訊號量有限的缺點,具有寫許可權得程序可以按照一定得規則向訊息佇列中新增新資訊;對訊息佇列有讀許可權得程序則可以從訊息佇列中讀取資訊。

4.共享記憶體(shared memory):

可以說這是最有用的程序間通訊方式。它使得多個程序可以訪問同一塊記憶體空間,不同程序可以及時看到對方程序中對共享記憶體中資料得更新。這種方式需要依靠某種同步操作,如互斥鎖和訊號量等。

5.訊號量(semaphore):

主要作為程序之間及同一種程序的不同執行緒之間得同步和互斥手段。

6.套接字(socket);

這是一種更為一般得程序間通訊機制,它可用於網路中不同機器之間的程序間通訊,應用非常廣泛。

++執行緒之間的同步通訊:

1.訊號量二進位制訊號量互斥訊號量整數型訊號量記錄型訊號量

2.訊息訊息佇列訊息郵箱

3.事件event

互斥型訊號量:必須是同乙個任務申請,同乙個任務釋放,其他任務釋放無效。同乙個任務可以遞迴申請。(互斥訊號量是二進位制訊號量的乙個子集)

二進位制訊號量:乙個任務申請成功後,可以由另乙個任務釋放。(與互斥訊號量的區別)

整數型訊號量:取值不侷限於0和1,可以乙個任務申請,另乙個任務釋放。(包含二進位制訊號量,二進位制訊號量是整數型訊號量的子集)

二進位制訊號量實現任務互斥:

印表機資源只有乙個,a bc三個任務共享,當a取得使用權後,為了防止其他任務錯誤地釋放了訊號量(二進位制訊號量允許其他任務釋放),必須將印表機房的門關起來(進入臨界段),用完後,釋放訊號量,再把門開啟(出臨界段),其他任務再進去列印。(而互斥型訊號量由於必須由取得訊號量的那個任務釋放,故不會出現其他任務錯誤地釋放了訊號量的情況出現,故不需要有臨界段。互斥型訊號量是二進位制訊號量的子集。)

二進位制訊號量實現任務同步:

a任務一直等待訊號量,b任務定時釋放訊號量,完成同步功能

記錄型訊號量(record semaphore):

每個訊號量s除乙個整數值value(計數)外,還有乙個等待佇列list,其中是阻塞在該訊號量的各個執行緒的標識。當訊號量被釋放乙個,值被加一後,系統自動從等待佇列中喚醒乙個等待中的執行緒,讓其獲得訊號量,同時訊號量再減一。

+++同步和互斥的區別:

當 有多個執行緒的時候,經常需要去同步這些執行緒以訪問同乙個資料或資源。例如,假設有乙個程式,其中乙個執行緒用於把檔案讀到記憶體,而另乙個執行緒用於統計檔案中 的字元數。當然,在把整個檔案調入記憶體之前,統計它的計數是沒有意義的。但是,由於每個操作都有自己的執行緒,作業系統會把兩個執行緒當作是互不相干的任務分 別執行,這樣就可能在沒有把整個檔案裝入記憶體時統計字數。為解決此問題,你必須使兩個執行緒同步工作。

所 謂互斥,是指散布在不同程序之間的若干程式片斷,當某個程序執行其中乙個程式片段時,其它程序就不能執行它們之中的任一程式片段,只能等到該程序執行完這 個程式片段後才可以執行。如果用對資源的訪問來定義的話,互斥某一資源同時只允許乙個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資 源的訪問順序,即訪問是無序的

所謂同步,是指散步在不同程序之間的若干程式片斷,它們的執行必須嚴格按照規定的某種先後次序來執行,這種先後次序依賴於要完成的特定的任務。如果用對資源的訪問來定義的話,同步是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源

程序通訊方式 與 執行緒通訊方式

程序通訊方式 與 執行緒通訊方式 程序通訊方式 7種 管道pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。命名管道fifo 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊息佇列messagequeue...

程序間的通訊方式,執行緒間的通訊方式 程序

當時做筆記的時候 忘了在 看到的了,有時間我再研究研究 管道 pipe 管道是一種半雙工的通訊方式,資料只能單向流動,而且只能在具有親緣關係的程序間使用。程序的親緣關係通常是指父子程序關係。有名管道 namedpipe 有名管道也是半雙工的通訊方式,但是它允許無親緣關係程序間的通訊。訊號量 semo...

程序與執行緒的概念與通訊方式

文章目錄 三 執行緒的定義 四 執行緒的通訊方式 總結 示例 pandas 是基於numpy 的一種工具,該工具是為了解決資料分析任務而建立的。如下 示例 import numpy as np import pandas as pd import matplotlib.pyplot as plt i...