Python中程序和執行緒的總體區別
Num01–>執行緒
執行緒是作業系統中能夠進行運算排程的最小單位。它被包含在程序之中,是程序中的實際運作單位。
一個執行緒指的是程序中一個單一順序的控制流。
一個程序中可以併發多條執行緒,每條執行緒並行執行不同的任務。
Num02–>程序
程序就是一個程式在一個數據集上的一次動態執行過程。
程序有以下三部分組成:
1,程式:我們編寫的程式用來描述程序要完成哪些功能以及如何完成。
2,資料集:資料集則是程式在執行過程中需要的資源,比如圖片、音視訊、檔案等。
3,程序控制塊:程序控制塊是用來記錄程序的外部特徵,描述程序的執行變化過程,系統可以用它來控制和管理程序,它是系統感知程序存在的唯一標記。
Num03–>程序和執行緒的區別:
1、執行方式不同:
程序不能單獨執行,它只是資源的集合。
程序要操作CPU,必須要先建立一個執行緒。
所有在同一個程序裡的執行緒,是同享同一塊程序所佔的記憶體空間。
2,關係
程序中第一個執行緒是主執行緒,主執行緒可以建立其他執行緒;其他執行緒也可以建立執行緒;執行緒之間是平等的。
程序有父程序和子程序,獨立的記憶體空間,唯一的識別符號:pid。
3,速度
啟動執行緒比啟動程序快。
執行執行緒和執行程序速度上是一樣的,沒有可比性。
執行緒共享記憶體空間,程序的記憶體是獨立的。
4,建立
父程序生成子程序,相當於複製一份記憶體空間,程序之間不能直接訪問
建立新執行緒很簡單,建立新程序需要對父程序進行一次複製。
一個執行緒可以控制和操作同級執行緒裡的其他執行緒,但是程序只能操作子程序。
5,互動
同一個程序裡的執行緒之間可以直接訪問。
兩個程序想通訊必須通過一箇中間代理來實現。
Num04–>幾個常見的概念
1,什麼的併發和並行?
併發:微觀上CPU輪流執行,巨集觀上使用者看到同時執行。因為cpu切換任務非常快。
並行:是指系統真正具有同時處理多個任務(動作)的能力。
2,同步、非同步和輪詢的區別?
同步任務:B一直等著A,等A完成之後,B再執行任務。(打電話案例)
輪詢任務:B沒有一直等待A,B過一會來問一下A,過一會問下A
非同步任務:B不需要一直等著A, B先做其他事情,等A完成後A通知B。(發簡訊案例)
Num05–>程序和執行緒的優缺點比較
首先,要實現多工,通常我們會設計Master-Worker模式,Master負責分配任務,Worker負責執行任務,因此,多工環境下,通常是一個Master,多個Worker。
如果用多程序實現Master-Worker,主程序就是Master,其他程序就是Worker。
如果用多執行緒實現Master-Worker,主執行緒就是Master,其他執行緒就是Worker。
多程序模式最大的優點就是穩定性高,因為一個子程序崩潰了,不會影響主程序和其他子程序。(當然主程序掛了所有程序就全掛了,但是Master程序只負責分配任務,掛掉的概率低)著名的Apache最早就是採用多程序模式。
多程序模式的缺點是建立程序的代價大,在Unix/Linux系統下,用fork呼叫還行,在Windows下建立程序開銷巨大。另外,作業系統能同時執行的程序數也是有限的,在記憶體和CPU的限制下,如果有幾千個程序同時執行,作業系統連排程都會成問題。華陽男性丁丁會勃起困難的原因?
多執行緒模式通常比多程序快一點,但是也快不到哪去,而且,多執行緒模式致命的缺點就是任何一個執行緒掛掉都可能直接造成整個程序崩潰,因為所有執行緒共享程序的記憶體。在Windows上,如果一個執行緒執行的程式碼出了問題,你經常可以看到這樣的提示:“該程式執行了非法操作,即將關閉”,其實往往是某個執行緒出了問題,但是作業系統會強制結束整個程序。
在Windows下,多執行緒的效率比多程序要高,所以微軟的IIS伺服器預設採用多執行緒模式。由於多執行緒存在穩定性的問題,IIS的穩定性就不如Apache。為了緩解這個問題,IIS和Apache現在又有多程序+多執行緒的混合模式,真是把問題越搞越複雜。
Num06–>計算密集型任務和IO密集型任務
是否採用多工的第二個考慮是任務的型別。我們可以把任務分為計算密集型和IO密集型。
第一種:計算密集型任務的特點是要進行大量的計算,消耗CPU資源,比如計算圓周率、對視訊進行高清解碼等等,全靠CPU的運算能力。這種計算密集型任務雖然也可以用多工完成,但是任務越多,花在任務切換的時間就越多,CPU執行任務的效率就越低,所以,要最高效地利用CPU,計算密集型任務同時進行的數量應當等於CPU的核心數。成都駟馬橋早洩手術效果好嗎
計算密集型任務由於主要消耗CPU資源,因此,程式碼執行效率至關重要。Python這樣的指令碼語言執行效率很低,完全不適合計算密集型任務。對於計算密集型任務,最好用C語言編寫。新都區割包皮多少錢
第二種:任務的型別是IO密集型,涉及到網路、磁碟IO的任務都是IO密集型任務,這類任務的特點是CPU消耗很少,任務的大部分時間都在等待IO操作完成(因為IO的速度遠遠低於CPU和記憶體的速度)。對於IO密集型任務,任務越多,CPU效率越高,但也有一個限度。常見的大部分任務都是IO密集型任務,比如Web應用。
IO密集型任務執行期間,99%的時間都花在IO上,花在CPU上的時間很少,因此,用執行速度極快的C語言替換用Python這樣執行速度極低的指令碼語言,完全無法提升執行效率。對於IO密集型任務,最合適的語言就是開發效率最高(程式碼量最少)的語言,指令碼語言是首選,C語言最差。