知識點2全局解釋器(GIL)_第1頁
知識點2全局解釋器(GIL)_第2頁
知識點2全局解釋器(GIL)_第3頁
知識點2全局解釋器(GIL)_第4頁
知識點2全局解釋器(GIL)_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

全局解釋器鎖(GIL)全局解釋器鎖(GIL)摘要全局解釋器鎖(GlobalInterpreterLock)。在Cpython解釋器中,同一個進程下開啟的多線程,同一時刻只能有一個線程執(zhí)行,無法利用多核優(yōu)勢。首先需要明確的一點是GIL并不是Python的特性,它是在實現(xiàn)Python解析器(CPython)時所引入的一個概念。就好比C++是一套語言(語法)標準,但是可以用不同的編譯器來編譯成可執(zhí)行代碼。有名的編譯器例如GCC,INTELC++,VisualC++等。Python也一樣,同樣一段代碼可以通過CPython,PyPy,Psyco等不同的Python執(zhí)行環(huán)境來執(zhí)行。像其中的JPython就沒有GIL。然而因為CPython是大部分環(huán)境下默認的Python執(zhí)行環(huán)境。所以在很多人的概念里CPython就是Python,也就想當然的把GIL歸結(jié)為Python語言的缺陷。所以這里要先明確一點:GIL并不是Python的特性,Python完全可以不依賴于GIL關(guān)鍵詞GIL1計算密集型和I/O秘籍型2計算密集型任務(wù)的特點是要進行大量的計算,消耗CPU資源,比如計算圓周率、對視頻進行高清解碼等等,全靠CPU的運算能力。這種計算密集型任務(wù)雖然也可以用多任務(wù)完成,但是任務(wù)越多,花在任務(wù)切換的時間就越多,CPU執(zhí)行任務(wù)的效率就越低,所以,要最高效地利用CPU,計算密集型任務(wù)同時進行的數(shù)量應(yīng)當?shù)扔贑PU的核心數(shù)。計算密集型任務(wù)由于主要消耗CPU資源,因此,代碼運行效率至關(guān)重要。Python這樣的腳本語言運行效率很低,完全不適合計算密集型任務(wù)。對于計算密集型任務(wù),最好用C語言編寫。3IO密集型,涉及到網(wǎng)絡(luò)、磁盤IO的任務(wù)都是IO密集型任務(wù),這類任務(wù)的特點是CPU消耗很少,系統(tǒng)運作,大部分的狀況是CPU在等I/O(硬盤/內(nèi)存)的讀/寫(因為IO的速度遠遠低于CPU和內(nèi)存的速度)。對于IO密集型任務(wù),任務(wù)越多,CPU效率越高,但也有一個限度。常見的大部分任務(wù)都是IO密集型任務(wù),比如Web應(yīng)用。計算密集型和I/O秘籍型41.多cpu到底是用來做計算的,還是用來做I/O的?多cpu,意味著可以有多個核并行完成計算,所以多核提升的是計算性能2.每個cpu一旦遇到I/O阻塞,仍然需要等待,所以多核對I/O操作沒什么用處一個工人相當于cpu,此時計算相當于工人在干活,I/O阻塞相當于為工人干活提供所需原材料的過程,工人干活的過程中如果沒有原材料了,則工人干活的過程需要停止,直到等待原材料的到來。如果你的工廠干的大多數(shù)任務(wù)都要有準備原材料的過程(I/O密集型),那么你有再多的工人,意義也不大,還不如一個人,在等材料的過程中讓工人去干別的活,反過來講,如果你的工廠原材料都齊全,那當然是工人越多,效率越高計算密集型和I/O秘籍型5計算密集型和I/O秘籍型結(jié)論:對計算來說,cpu越多越好,但是對于I/O來說,再多的cpu也沒用我們有四個任務(wù)需要處理,處理方式肯定是要玩出并發(fā)的效果,解決方案可以是:方案一:開啟四個進程方案二:一個進程下,開啟四個線程·單核情況下,分析結(jié)果:如果四個任務(wù)是計算密集型,沒有多核來并行計算,方案一徒增了創(chuàng)建進程的開銷,方案二勝如果四個任務(wù)是I/O密集型,方案一創(chuàng)建進程的開銷大,且進程的切換速度遠不如線程,方案二勝·多核情況下,分析結(jié)果:如果四個任務(wù)是計算密集型,多核意味著并行計算,在python中一個進程中同一時刻只有一個線程執(zhí)行用不上多核,方案一勝如果四個任務(wù)是I/O密集型,再多的核也解決不了I/O問題,方案二勝結(jié)論:現(xiàn)在的計算機基本上都是多核,python對于計算密集型的任務(wù)開多線程的效率并不能帶來多大性能上的提升,甚至不如串行(沒有大量切換),但是,對于IO密集型的任務(wù)效率還是有顯著提升的。6示例1:計算密集型和I/O秘籍型7上述代碼中通過切換17和18行的注釋達到多線程和多進程的運行結(jié)果,輸出結(jié)果如下:計算密集型和I/O秘籍型可以看出計算密集型時,多進程速度快很多。8計算密集型和I/O秘籍型示例2:9計算密集型和I/O秘籍型上

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論