在以下的文章之中我們來了解什麼是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中文網其他相關文章!

Python在自動化、腳本編寫和任務管理中表現出色。 1)自動化:通過標準庫如os、shutil實現文件備份。 2)腳本編寫:使用psutil庫監控系統資源。 3)任務管理:利用schedule庫調度任務。 Python的易用性和豐富庫支持使其在這些領域中成為首選工具。

要在有限的時間內最大化學習Python的效率,可以使用Python的datetime、time和schedule模塊。 1.datetime模塊用於記錄和規劃學習時間。 2.time模塊幫助設置學習和休息時間。 3.schedule模塊自動化安排每週學習任務。

Python在遊戲和GUI開發中表現出色。 1)遊戲開發使用Pygame,提供繪圖、音頻等功能,適合創建2D遊戲。 2)GUI開發可選擇Tkinter或PyQt,Tkinter簡單易用,PyQt功能豐富,適合專業開發。

Python适合数据科学、Web开发和自动化任务,而C 适用于系统编程、游戏开发和嵌入式系统。Python以简洁和强大的生态系统著称,C 则以高性能和底层控制能力闻名。

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

VSCode Windows 64位元 下載
微軟推出的免費、功能強大的一款IDE編輯器

DVWA
Damn Vulnerable Web App (DVWA) 是一個PHP/MySQL的Web應用程序,非常容易受到攻擊。它的主要目標是成為安全專業人員在合法環境中測試自己的技能和工具的輔助工具,幫助Web開發人員更好地理解保護網路應用程式的過程,並幫助教師/學生在課堂環境中教授/學習Web應用程式安全性。 DVWA的目標是透過簡單直接的介面練習一些最常見的Web漏洞,難度各不相同。請注意,該軟體中

SublimeText3 Linux新版
SublimeText3 Linux最新版

Dreamweaver CS6
視覺化網頁開發工具

MantisBT
Mantis是一個易於部署的基於Web的缺陷追蹤工具,用於幫助產品缺陷追蹤。它需要PHP、MySQL和一個Web伺服器。請查看我們的演示和託管服務。