在以下的文章之中我們來瞭解一下什麼是
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、同步和互斥的區別:
當有多個線程的時候,經常需要去同步這些線程以訪問同一個資料或資源。例如,假設有一個程式,其中一個線程用於把檔案讀到記憶體,而另一個線程用於統計檔案中的字元數。當然,在把整個檔案調入記憶體之前,統計它的計數是沒有意義的。但是,由於每個操作都有自己的線程,作業系統會把兩個線程當作是互不相干的任務分別執行,這樣就可能在沒有把整個檔案裝入記憶體時統計字數。為解決此問題,你必須使兩個線程同步工作。
所謂同步,是指散步在不同進程之間的若干程式片斷,它們的運行必須嚴格按照規定的某種先後次序來運行,這種先後次序依賴於要完成的特定的任務。如果用對資源的訪問來定義的話,同步是指在互斥的基礎上(大多數情況),通過其它機制實現訪問者對資源的有序訪問。在大多數情況下,同步已經實現了互斥,特別是所有寫入資源的情況必定是互斥的。少數情況是指可以允許多個訪問者同時訪問資源。
所謂互斥,是指散布在不同進程之間的若干程式片斷,當某個進程運行其中一個程式片段時,其它進程就不能運行它們之中的任一程式片段,只能等到該進程運行完這個程式片段後才可以運行。如果用對資源的訪問來定義的話,互斥某一資源同時只允許一個訪問者對其進行訪問,具有唯一性和排它性。但互斥無法限制訪問者對資源的訪問順序,即訪問是無序的。