Python中的多工 程序和多執行緒

2021-08-28 14:10:17 字數 1852 閱讀 1372

摘至本人有道雲筆記《python中的多工--程序和多執行緒》

簡單地說,就是作業系統可以同時執行多個任務。對於作業系統來說,乙個任務就是乙個程序。

時間片排程:各個任務交替執行,任務1執行0.01秒,切換到任務2,任務2執行0.01秒,再 切換到任務3,執行0.01秒……這樣反覆執行下去。表面上看,每個任務都是交替執行的,但是,由於cpu的執行速度實在是太快了,我們感覺就像所有任務都在同時執行一樣。

有些程序還不止同時幹一件事,比如word,它可以同時進行打字、拼寫檢查、列印等事情。在乙個程序內部,要同時幹多件事,就需要同時執行多個「子任務」,我們把程序內的這些「子任務」稱為執行緒(thread)。

多工可以由多程序完成,也可以由一個程序內的多執行緒完成。

執行緒是作業系統中能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。

乙個執行緒指的是程序中乙個單一順序的控制流。

乙個程序中可以併發多條執行緒,每條執行緒並行執行不同的任務。

多程序和多執行緒都可以執行多個任務,執行緒是程序的一部分。執行緒的特點是執行緒之間可以共享記憶體和變數,資源消耗少(不過在unix環境中,多程序和多執行緒資源排程消耗差距不明顯,unix排程較快),缺點是執行緒之間的同步和加鎖比較麻煩。

1)啟動多個程序

2)啟動乙個程序,在乙個程序內啟動多個執行緒,這樣,多個執行緒也可以一塊執行多個任務。

3)啟動多個程序,每個程序再啟動多個執行緒,這樣同時執行的任務就更多了,當然這種模型更複雜,實際很少採用

同時執行多個任務通常各個任務之間並不是沒有關聯的,而是需要相互通訊和協調 queue()

併發:微觀上cpu輪流執行,巨集觀上使用者看到同時執行。因為cpu切換任務非常快。

程序數大於cpu核數

並行:是指系統真正具有同時處理多個任務(動作)的能力。

程序小於cpu核數

多執行緒屬於高併發

同步任務:b一直等著a,等a完成之後,b再執行任務。(打**案例)

輪詢任務:b沒有一直等待a,b過一會來問一下a,過一會問下a

非同步任務:b不需要一直等著a, b先做其他事情,等a完成後a通知b。(發簡訊案例)常用

是否採用多工的第二個考慮是任務的型別。我們可以把任務分為計算密集型和io密集型。

計算密集型任務由於主要消耗cpu資源,因此,**執行效率至關重要。python這樣的指令碼語言執行效率很低,完全不適合計算密集型任務。對於計算密集型任務,最好用c語言編寫。

第二種:任務的型別是io密集型,涉及到網路、磁碟io的任務都是io密集型任務,這類任務的特點是cpu消耗很少,任務的大部分時間都在等待io操作完成(因為io的速度遠遠低於cpu和記憶體的速度)。對於io密集型任務,任務越多,cpu效率越高,但也有乙個限度。常見的大部分任務都是io密集型任務,比如web應用。

io密集型任務執行期間,99%的時間都花在io上,花在cpu上的時間很少,因此,用執行速度極快的c語言替換用python這樣執行速度極低的指令碼語言,完全無法提公升執行效率。對於io密集型任務,最合適的語言就是開發效率最高(**量最少)的語言,指令碼語言是首選,c語言最差。

計算密集型任務,應該使用python多程序

io密集型任務,應使用多執行緒

2018/08/02 16:23

python 多工 程序

什麼是程序?程式是靜態的,當程式執行起來就叫做程序。程序是作業系統分配資源的基本單元。程序 執行緒的區別與優缺點 1.定義的不同 程序是系統進行資源分配的最小單位.執行緒是程序的乙個實體,是cpu進行排程的基本單位。執行緒自己基本上不擁有系統資源,只擁有一點在執行中必不可少的資源 如程式計數器,一組...

Python多工之程序

python通過多程序實現多工的幾種方法 只用在類unix linux系統中有效,windows系統中無效 fork函式呼叫一次,返回兩次 在父程序中返回值為子程序id,在子程序中返回值為0 import os ret os.fork if ret 父程序 print 主程序,pid format ...

Python 多工 程序池

高階程式設計技巧 學習筆記 1.1 為什麼要用程序池 當需要建立的子程序數量不多時,可以直接利用multiprocessing中的process動態生成多個程序,但是如果是上百甚至上千個目標,手動的去建立的程序的工作量巨大,此時就可以用到multiprocessing模組提供的pool方法。初始化 ...