在以下的文章之中我們來了解什麼是python中的執行緒。了解python進程的相關知識,以及多執行緒python應用於python程式設計之中能起到什麼樣的作用。
引入進程和執行緒的概念及區別
1、執行緒的基本概念
概念
#執行緒是進程中執行運算的最小單位,是進程中的一個實體,是被系統獨立調度和分派的基本單位,執行緒本身不擁有系統資源,只擁有一點在運作中必不可少的資源,但它可與同屬一個行程的其它執行緒共享進程所擁有的全部資源。一個線程可以建立和撤銷另一個線程,同一進程中的多個線程之間可以並發執行。
好處
(1)易於調度。
(2)提高並發性。透過執行緒可方便有效地實現並發性。進程可建立多個執行緒來執行同一程式的不同部分。
(3)開銷少。建立執行緒比建立行程快,所需開銷很少
2、行程的基本狀態及狀態之間的關係
狀態:運作、阻塞、掛起阻塞、就緒、掛起就緒
狀態之間的轉換:
(1)準備就緒的進程,被CPU調度執行,變成運行態;
(2)運行中的進程,進行I/O請求或無法得到所請求的資源,變成阻塞態;
(3)運行中的進程,進程執行完畢(或時間片已到),變成就緒態;
(4)將阻塞態的進程掛起,變成掛起阻塞態,當導致進程阻塞的I/O操作在使用者重啟進程前完成(稱之為喚醒),掛起阻塞態變成掛起就緒態,當使用者在I/O作業結束前重啟進程,掛起阻塞態變成阻塞態;
(5)將就緒(或執行)中的進程掛起,變成掛起就緒態,當該進程恢復之後,掛起就緒態變成就緒態;
3、執行緒和進程的關係以及差異?
進程和執行緒的關係:
(1)一個執行緒只能屬於一個行程,而一個行程可以有多個執行緒,但至少有一個執行緒。
(2)資源分配給進程,同一進程的所有執行緒共享該進程的所有資源。
(3)處理機分給線程,也就是真正在處理機上執行的是執行緒
(4)執行緒在執行過程中,需要協作同步。不同行程的執行緒間要利用訊息通訊的辦法實現同步。執行緒是指進程內的一個執行單元,也是進程內的可調度實體.
進程與執行緒的區別:
(1)調度:執行緒作為調度和分配的基本單位,進程作為擁有資源的基本單位
(2)並發性:不僅進程之間可以並發執行,同一個進程的多個執行緒之間也可並發執行
(3)擁有資源:進程是擁有資源的一個獨立單位,執行緒不擁有系統資源,但可以存取隸屬於進程的資源.
(4)系統開銷:在建立或撤銷進程時,由於系統都要為之分配和回收資源,導致系統的開銷明顯大於建立或撤銷執行緒時的開銷。
4、進程間通訊的方式?
(1)管道(pipe)及有名管道(named pipe):管道可用於具有親緣關係的父子進程間的通信,有名管道除了具有管道所具有的功能外,它還允許無親緣關係關係進程間的通訊。
(2)訊號(signal):訊號是一種在軟體層次上中斷機制的模擬,它是比較複雜的通訊方式,用來通知行程有某事件發生,一個行程收到一個訊號與處理器收到一個中斷請求效果上可以說是一致的。
(3)訊息佇列(message queue):訊息佇列是訊息的連結表,它克服了上兩種通訊方式中信號量有限的缺點,具有寫權限得進程可以按照一定得規則向訊息佇列中新增資訊;對訊息佇列有讀取權限得進程則可以從訊息佇列中讀取資訊。
(4)共享記憶體(shared memory):可以說這是最有用的進程間通訊方式。它使得多個進程可以存取同一塊記憶體空間,不同進程可以及時看到對方進程中對共享記憶體中資料得更新。這種方式需要依賴某種同步操作,如互斥鎖和信號量等。
(5)信號量(semaphore):主要作為進程之間及同一種進程的不同線程之間得同步和互斥手段。
(6)套接字(socket):這是一種更為一般得進程間通訊機制,它可用於網路中不同機器之間的進程間通信,應用非常廣泛。
5、同步和互斥的區別:
當有多個執行緒的時候,經常需要去同步這些執行緒以存取同一個資料或資源。例如,假設有一個程序,其中一個線程用於把文件讀到內存,而另一個線程用於統計文件中的字元數。當然,在把整個檔案調入記憶體之前,統計它的計數是沒有意義的。但是,由於每個操作都有自己的線程,作業系統會把兩個線程當作是互不相干的任務分別執行,這樣就可能在沒有把整個檔案裝入記憶體時統計字數。要解決此問題,你必須使兩個執行緒同步工作。
所謂同步,是指散步在不同進程之間的若干程序片段,它們的運行必須嚴格按照規定的某種先後次序來運行,這種先後次序依賴於要完成的特定的任務。如果用對資源的存取來定義的話,同步是指在互斥的基礎上(大多數情況),透過其它機制實現訪問者對資源的有序存取。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪客同時存取資源。
所謂互斥,是指散佈在不同進程之間的若干程式片段,當某個進程運行其中一個程式片段時,其它進程就不能運行它們之中的任一程式片段,只能等到該行程運行完這個程式片段後才可以執行。如果用資源的存取來定義的話,互斥某一資源同時只允許一個訪客對其進行訪問,具有唯一性和排它性。但互斥無法限制訪客對資源的存取順序,即存取是無序的。
以上就是這篇文章所講述的所有內容,這篇文章主要介紹了#python中的線程的相關知識,希望你能藉助資料從而理解上述所說的內容。希望我在這片文章所講述的內容能夠對你有幫助,讓你學習python更加輕鬆。
更多相關知識,請造訪php中文網Python教學欄位。
以上是python中的執行緒是什麼?概念及優點概括的詳細內容。更多資訊請關注PHP中文網其他相關文章!