眾所周知,CPU是計算機的核心,它承擔著所有的計算任務。操作系統是電腦的管理者,是大管家。它負責調度任務,分配和管理資源,指揮整個計算機硬件。應用程序是具有某種功能的程序,它運行在操作系統之上。
在很早的時候,計算機還沒有線程的概念,但是隨著時代的發展,只用進程來處理程序有很多缺點。比如當壹個進程被阻塞時,整個程序會停在阻塞的地方,如果進程切換頻繁,會浪費系統資源。於是線程出現了。
線程是能夠擁有資源並獨立運行的最小單位,也是程序執行的最小單位。壹個進程可以有多個線程,屬於同壹個進程的多個線程將* * *共享資源。
Python電子書(以及經典書籍)應該在200本以上。
② Python標準庫資料(最全中文版)
③項目源代碼(四五十個有趣可靠的訓練項目和源代碼)
④關於Python基礎、爬蟲、網絡開發、大數據分析的視頻(適合小白學習)
⑤ Python學習路線圖(告別差學)
您可以通過01信任我個人獲得大量Python學習資源。
進程是壹個程序在數據集上具有壹定功能的動態執行過程。過程由程序、數據集和過程控制塊組成。程序用於描述進程要完成的功能,是控制進程執行的指令集。數據集是程序執行時需要的數據和工作空間;程序控制塊(PCB)包含程序的描述信息和控制信息,是進程存在的唯壹標誌。
在Python中,thread由封裝了thread的兩個標準庫Thread和Threading支持。線程模塊中提供了線程、鎖、r鎖、條件和其他組件。
在Python中,線程和進程是通過thread類使用的。這個類在我們的線程和線程模塊中。我們通常通過線程導入。
默認情況下,只要解釋器中沒有錯誤,線程就是可用的。
監護人模式:
現在在我們的程序代碼中,有多個線程,它們都會對同壹部分內容進行操作,那麽如何實現這些數據的* * *享受呢?
這時可以使用線程庫中的Lock對象鎖來保護它。
鎖對象的獲取方法是申請鎖。
每個線程在用* * * *操作數據對象之前都要申請操作權限,即調用用* * * *操作數據對象對應的鎖對象的acquire方法。如果線程A執行了acquire()方法,其他線程B已經申請了鎖,還沒有釋放,那麽線程A的代碼會在這裏等待線程B釋放鎖,不執行下面的代碼。
在線程B通過執行鎖的release方法釋放鎖之前,線程A可以獲取鎖並執行下面的代碼。
比如:
使用多線程時,如果數據沒有達到妳的預期,可以考慮* * *享受的數據是否被調用覆蓋。
使用線程庫中的鎖對象鎖來保護它。
Python中的多重處理是通過多重處理包實現的,類似於threading.Thread,可以使用多重處理。過程對象來創建過程對象。這個Process對象的方法和Thread對象的方法幾乎壹樣,比如start()、run()、join()等。壹個方法不同於thread對象中的daemon方法,通過設置daemon屬性來完成process對象的守護。
監護人模式:
它的用法類似於線程鎖。
管理器的作用是提供多個進程共享的全局變量。Manager()方法會返回壹個控制壹個服務進程的對象,這個進程中保存的對象運行其他進程來代理操作。
語法:
線程池的基類是concurrent.futures模塊中的執行器,執行器提供了兩個子類,ThreadPoolExecutor和ProcessPoolExecutor。其中ThreadPoolExecutor用於創建線程池,ProcessPoolExecutor用於創建進程池。
如果用線程池/進程池來管理並發編程,那麽只要把相應的任務函數提交給線程池/進程池,剩下的就由線程池/進程池來處理。
Exectuor提供了以下常用方法:
程序向線程池提交任務函數後,submit方法會返回壹個Future對象,Future類主要用於獲取線程任務函數的返回值。因為線程任務會在新線程中異步執行,線程執行的函數相當於壹個“未來完成”的任務,所以Python用未來來表示。
未來提供了以下方法:
使用線程池執行線程任務的步驟如下:
最佳線程數=((線程等待時間+線程CPU時間)/線程CPU時間)* CPU數。
也可以低於CPU核心數。
使用線程池執行線程任務的步驟如下:
進程的啟動代碼必須放在if _ _ name _ =' _ _ main _ _ ':代碼下,而不是放在函數中或其他地方。
啟動流程的技能
打開進程的數量最好低於CPU核心的最大數量。