多程序和多執行緒

2021-10-06 08:06:54 字數 1771 閱讀 6247

一、python 中多程序的使用

1、使用multiprocessing

p = process(target=function, args=(引數,))

p.start()含義啟動程序

p.join()含義是等待子程序結束後在繼續執行

2、如果啟動大量的子程序,可以用程序池的方式批量建立子程序

from multiprocessing import pool

p = pool(4)

for i in range(5):

p.close()

p.terminate()進入死迴圈時,只能強行終止

單執行緒(程序)中使用close與多執行緒中是一致的,但兩者與多程序的行為並不一致,多程序中共享同乙個socket必須都呼叫close才會真正的關閉起來,而shutdown沒有引用計數,呼叫就會關閉連線

3、pool預設大小是cpu核數

4、subprocess 模組可以更方便的啟動子程序,然後控制輸入及輸出

5、process提供了queue、pips方式程序交換資料

6、multiprocessing 模組封裝了fork()呼叫,當呼叫fork()時,返回兩次。作業系統把當前程序複製乙份,子程序永遠返回0,而父程序返回子程序的id

7、程序是由若干執行緒組成的,乙個程序至少有乙個執行緒

二、多執行緒(使用模組threading):

1,、由於任何程序缺省會啟動乙個執行緒,我們該執行緒稱為主線程,主線程可以啟動新的執行緒,python模組中threading中有current_thread(),它永遠返回當前執行緒的例項,主線程的例項叫mainthread()

2、threading.lock()

執行緒獲取鎖,因此其他執行緒不能同時執行函式,只能等待,直到鎖被釋放後,獲取該鎖才能修改。

使用lock.acquire() 獲取鎖

try:

finally:

lock.release() 釋放鎖

3、python 多核gil全域性鎖,導致python執行緒無法利用多核用來保證鎖一定被釋放掉

4、treadlocal(為了避免每個函式層層呼叫,將每個執行緒的名字作為key,函式作為value使用)

1)可以儲存全域性變數

2)也不需要管理鎖的問題,內部會處理

最常用的地方解決資料的鏈結

## 三、多執行緒和多程序區別:

1)多程序中,同乙份變數,都各自有乙份拷貝存在於每個程序中,互不影響。

2)多程序優點

多程序模式的最大優點是穩定性高,因為乙個子程序崩潰了,不會影響主程序和其他子程序

1、多程序的缺點

多程序的缺點就是建立程序的代價大,在linux系統下用fork呼叫還行,在windows下開銷巨大。作業系統同時執行的程序是有限的,在記憶體和cpu的限制下。

2、多執行緒的缺點

致命缺點:

1)、任何乙個執行緒掛掉都可能造成整個程序崩潰,應為執行緒共享記憶體

在windows下,多執行緒的效率比多程序高,多執行緒存在穩定性問題

2)、多執行緒中,都由所有執行緒共享,任何乙個變數都可以被任何執行緒修改。執行緒之間共享資料最大的危險在於多個執行緒同時修改乙個變數。

四:計算密集型vs io密集型

計算密集型任務的特點是要進行大量計算,消耗cpu資源,全靠cpu的執行能力,任務越多,cpu執行任務的效率越低,因此**的執行效率至關重要

io密集型:

涉及網路、磁碟io,這類人物的特點是cpu消耗很少,任務的大部分時間都是在等待io操作完成,對於io密集型任務,任務越多,cpu效率越高

多程序和多執行緒

嵌入式linux中文站,關於多程序和多執行緒,教科書上最經典的一句話是 程序是資源分配的最小單位,執行緒是cpu排程的最小單位 這句話應付考試基本上夠了,但如果在工作中遇到類似的選擇問題,那就沒有那麼簡單了,選的不好,會讓你深受其害。經常在網路上看到有xdjm問 多程序好還是多執行緒好?linux下...

多執行緒和多程序

首先說什麼是程序,載入記憶體中執行的程式,它就是乙個程序,而這個程式中執行的某個子任務就是乙個執行緒,程式包含了執行緒。程序對於執行緒是唯一的,而乙個程序可以有多個執行緒。程式執行的時候每隔一定時間在多執行緒之間執行,比如第乙個執行緒執行到0.01秒,馬上暫停跳到下乙個執行緒開始執行,又執行到0.0...

多程序和多執行緒

我們通常所得作業系統是多工的os。這個任務一般指的就是程序,比如 我們聽 和寫文件對於我們來說是同時執行的。那麼是如何實現的呢?這主要是作業系統上的時間片,通常時間很短。每個時間片內將cpu分配給某乙個任務,時間片結束,cpu將自動 再分配給另外任務。從外部看,所有任務是同時在執行。但是在cpu上,...