python多執行緒,多程序程式設計。

2021-09-07 16:25:17 字數 2361 閱讀 7730

程序,是目前計算機中為應用程式分配資源的最小單位;

執行緒,是目前計算機中執行應用程式的最小單位;

在實際系統中,其實程序都是被分為執行緒來實現的,所以參與時間片輪轉的是執行緒

但是管理應用程式的資源的單位和任務排程的單位都是程序。更像是乙個邏輯概念。

執行緒是程序分出來的更精細的單位,執行緒間的上下文切換比程序間的上下文切換,要快很多。

多程序與多核,這個概念很奇怪,因為程序是不會直接在核心上執行的。

多執行緒與多核,涉及乙個核心執行緒與使用者執行緒的對應關係

核心執行緒(kernel thread),一般與核心是一一對應的,乙個處理核心對應乙個核心程序。

目前的計算機,配置一般都是超執行緒的,即通過硬體冗餘,將乙個物理核心模擬成兩個邏輯處理核心

對應兩個核心執行緒。所以在作業系統中看到的cpu是實際物理核心的兩倍。

如雙核四執行緒,四核八執行緒

intel的cpu為了實現分支**等技術,一般每個核心的運算單元是雙份的,-------超執行緒

伺服器方面的物理核心的運算單位,可能會更多,支援更大的超執行緒

使用者執行緒與核心執行緒的對應關係:

1) 一一對應,由於核心執行緒很少,所以限制了很多使用者執行緒的執行數量;

2) 多對一,使用者執行緒很慢,影響排程;

3) 多對多,目前應用的模式,

python中的多程序庫,multiprocessing,提供的方法和屬性:

屬性:authkey,daemon(父程序終止後,自動結束子程序,必須在start之前設定),exitcode,name,pid

方法: process(target,name,args,kwargs),建立程序物件

is_live(),程序狀態

join('timeout'),表示等待後台的程序執行結束,如果指定timeout,一定時間後,殺掉程序

run(),

start(),

terminate(),

join(),等所有的後台子程序執行好;

cpu_count(),返回當前擁有的cpu的個數,超執行緒之後的。

程序建立時,target可以指定為乙個函式,也可以直接例化乙個程序class。

建立函式process:

建立class程序,start()之後,會自動呼叫run()函式:

加入daemon屬性:並不會等到該worker的process結束,程式就執行結束了。

多程序遍歷:active_children()

還可以加入lock,semaphore,實現對共享資源的控制,event,程序間通訊。

還有程序佇列(queue),和程序管道(pipe)

pool,程序池,不需要自己在管理程序的數量,程序池自動管理。

如果池中的程序數量達到閾值,阻塞其他程序。

參考部落格

python中的多執行緒,好像不是特別的好用,python內部有乙個global interpreter lock(gil),它阻礙了

python的多執行緒程式的同時執行。python中也有多執行緒的模組,threading模組。

有人做過實驗,在cpu密集型的任務中,多執行緒並不能有多少效率上的提公升,反而因為上下文的切換,降低效率。

而多程序,可以在多個core中並行的跑,效率會提高。

io密集型的任務中,多執行緒和多程序,都會帶來效能的提高。

網路請求密集型的任務中,多執行緒與多程序,相差無幾。

多程序可以發揮多核晶元的效能,在乙個程序中,可以在實現多執行緒的操作,來頻繁排程,防止io的阻塞。

python多執行緒 多程序程式設計

def defin canv w,h canvas np.zeros h,w canvas y0 1 y1,x0 1 x1 1 return canvas result pool multiprocessing.pool 將物件放入到類別中,包含了返回的物件 for anno in box pool...

python多執行緒 多程序

background task once join is used whether deamon attribute is true is not importantonly useful when the main program is running ok to kill starmap和map...

python多執行緒 多程序

threading相對與thread是更高階別的執行緒管理模組 thread和threading模組中的一些屬性會有衝突 thread模組擁有的同步原因實際上只有乙個lock,而threading有很多 lock,semaphore等 使用thread模組執行緒,當主線程結束時其子執行緒也會被強制結...