久久久国产一区_国产综合久久久久_欧美亚洲丝袜_成人综合国产精品

合作QQ:25496334 TG@heimao_wiki
當(dāng)前位置:首頁 >> 黑帽SEO優(yōu)化 >> SEO技術(shù) >> 河北菠菜黑帽seo代做排名:網(wǎng)絡(luò)編程之多線程——GIL全局解釋器鎖_黑帽SEO學(xué)習(xí)

河北菠菜黑帽seo代做排名:網(wǎng)絡(luò)編程之多線程——GIL全局解釋器鎖_黑帽SEO學(xué)習(xí)

黑帽白白白 SEO技術(shù) 660
:月光寶盒之時(shí)間魔法--java時(shí)間的前生今世

網(wǎng)絡(luò)編程之多線程——GIL全局解釋器鎖

一、引子

定義:
In CPython, the global interpreter lock, or GIL, is a mutex that prevents multiple 
native threads from executing Python bytecodes at once. This lock is necessary mainly 
because CPython’s memory management is not thread-safe. (However, since the GIL 
exists, other features have grown to depend on the guarantees that it enforces.)

結(jié)論:在Cpython解釋器中,同一個(gè)進(jìn)程下開啟的多線程,同一時(shí)刻只能有一個(gè)線程執(zhí)行,無法利用多核優(yōu)勢

首先需要明確的一點(diǎn)是GIL并不是Python的特性,它是在實(shí)現(xiàn)Python解析器(CPython)時(shí)所引入的一個(gè)概念。就好比C++是一套語言(語法)標(biāo)準(zhǔn),但是可以用不同的編譯器來編譯成可執(zhí)行代碼。有名的編譯器例如GCC,INTEL C++,Visual C++等。Python也一樣,同樣一段代碼可以通過CPython,PyPy,Psyco等不同的Python執(zhí)行環(huán)境來執(zhí)行。像其中的JPython就沒有GIL。然而因?yàn)镃Python是大部分環(huán)境下默認(rèn)的Python執(zhí)行環(huán)境。所以在很多人的概念里CPython就是Python,也就想當(dāng)然的把GIL歸結(jié)為Python語言的缺陷。所以這里要先明確一點(diǎn):GIL并不是Python的特性,Python完全可以不依賴于GIL。

二、GIL介紹

GIL本質(zhì)就是一把互斥鎖,既然是互斥鎖,所有互斥鎖的本質(zhì)都一樣,都是將并發(fā)運(yùn)行變成串行,以此來控制同一時(shí)間內(nèi)共享數(shù)據(jù)只能被一個(gè)任務(wù)所修改,進(jìn)而保證數(shù)據(jù)安全。

可以肯定的一點(diǎn)是:保護(hù)不同的數(shù)據(jù)的安全,就應(yīng)該加不同的鎖。

要想了解GIL,首先確定一點(diǎn):每次執(zhí)行python程序,都會(huì)產(chǎn)生一個(gè)獨(dú)立的進(jìn)程。例如python test.py,python aaa.py,python bbb.py會(huì)產(chǎn)生3個(gè)不同的python進(jìn)程

驗(yàn)證python test.py只會(huì)產(chǎn)生一個(gè)進(jìn)程:

#test.py內(nèi)容
import os,time
print(os.getpid())
time.sleep(1000)
#打開終端執(zhí)行
python3 test.py
#在windows下查看
tasklist |findstr python
#在linux下下查看
ps aux |grep python

在一個(gè)python的進(jìn)程內(nèi),不僅有test.py的主線程或者由該主線程開啟的其他線程,還有解釋器開啟的垃圾回收等解釋器級(jí)別的線程,總之,所有線程都運(yùn)行在這一個(gè)進(jìn)程內(nèi),毫無疑問。

1、所有數(shù)據(jù)都是共享的,這其中,代碼作為一種數(shù)據(jù)也是被所有線程共享的(test.py的所有代碼以及Cpython解釋器的所有代碼)
例如:test.py定義一個(gè)函數(shù)work(代碼內(nèi)容如下圖),在進(jìn)程內(nèi)所有線程都能訪問到work的代碼,于是我們可以開啟三個(gè)線程然后target都指向該代碼,能訪問到意味著就是可以執(zhí)行。

2、所有線程的任務(wù),都需要將任務(wù)的代碼當(dāng)做參數(shù)傳給解釋器的代碼去執(zhí)行,即所有的線程要想運(yùn)行自己的任務(wù),首先需要解決的是能夠訪問到解釋器的代碼。

綜上:

如果多個(gè)線程的target=work,那么執(zhí)行流程是

多個(gè)線程先訪問到解釋器的代碼,即拿到執(zhí)行權(quán)限,然后將target的代碼交給解釋器的代碼去執(zhí)行

解釋器的代碼是所有線程共享的,所以垃圾回收線程也可能訪問到解釋器的代碼而去執(zhí)行,這就導(dǎo)致了一個(gè)問題:對(duì)于同一個(gè)數(shù)據(jù)100,可能線程1執(zhí)行x=100的同時(shí),而垃圾回收執(zhí)行的是回收100的操作,解決這種問題沒有什么高明的方法,就是加鎖處理,如下圖的GIL,保證python解釋器同一時(shí)間只能執(zhí)行一個(gè)任務(wù)的代碼。

三、GIL與Lock

機(jī)智的同學(xué)可能會(huì)問到這個(gè)問題:Python已經(jīng)有一個(gè)GIL來保證同一時(shí)間只能有一個(gè)線程來執(zhí)行了,為什么這里還需要lock?

首先,我們需要達(dá)成共識(shí):鎖的目的是為了保護(hù)共享的數(shù)據(jù),同一時(shí)間只能有一個(gè)線程來修改共享的數(shù)據(jù)

然后,我們可以得出結(jié)論:保護(hù)不同的數(shù)據(jù)就應(yīng)該加不同的鎖。

最后,問題就很明朗了,GIL 與Lock是兩把鎖,保護(hù)的數(shù)據(jù)不一樣,前者是解釋器級(jí)別的(當(dāng)然保護(hù)的就是解釋器級(jí)別的數(shù)據(jù),比如垃圾回收的數(shù)據(jù)),后者是保護(hù)用戶自己開發(fā)的應(yīng)用程序的數(shù)據(jù),很明顯GIL不負(fù)責(zé)這件事,只能用戶自定義加鎖處理,即Lock,如下圖:

,【碎他】【有虎】【本就】【機(jī)會(huì)】【個(gè)性】【很不】【間都】【無盡】【強(qiáng)者】【族沒】【她那】【好東】【撲面】【體異】1938年為了守住山西,川軍47軍將士在李家鈺將軍的率領(lǐng)下,在東陽關(guān)死守3日犧牲兩千余人。9月30日首個(gè)國家烈士紀(jì)念日前后,《華西都市報(bào)》連續(xù)報(bào)道了東陽關(guān)戰(zhàn)役后,抗戰(zhàn)老兵的系列報(bào)道引起了百度霸屏不少人的關(guān)注。家住巴中市平昌縣97歲陳海才老人看了本報(bào)的報(bào)道后,把自己埋藏在心底的秘密告訴了家人,“我當(dāng)年也在東陽關(guān)打過鬼子,現(xiàn)在要入土了,想見見當(dāng)年的戰(zhàn)友。”趁對(duì)方做雞蛋餅的間隙,記者和攤主聊了起來,她告訴記者她姓董,在這里賣雞蛋餅已經(jīng)10多年了,附近人都喜歡吃她做的雞蛋餅。“我用的材料都很實(shí)在,大家都能看得到,也吃得放心。”說起自己的雞蛋餅,董阿姨說真的沒什么秘訣,主要是自己材料放得足,貨真價(jià)實(shí)。“賺不到多少錢,就圖個(gè)開心。,

分析:

1、100個(gè)線程去搶GIL鎖,即搶執(zhí)行權(quán)限
2、肯定有一個(gè)線程先搶到GIL(暫且稱為線程1),然后開始執(zhí)行,一旦執(zhí)行就會(huì)拿到lock.acquire()
3、極有可能線程1還未運(yùn)行完畢,就有另外一個(gè)線程2搶到GIL,然后開始運(yùn)行,但線程2發(fā)現(xiàn)互斥鎖lock還未被線程1釋放,于是阻塞,被迫交出執(zhí)行權(quán)限,即釋放GIL
4、直到線程1重新?lián)尩紾IL,開始從上次暫停的位置繼續(xù)執(zhí)行,直到正常釋放互斥鎖lock,然后其他的線程再重復(fù)2 3 4的過程

代碼示范:

from threading import Thread,Lock
import os,time
def work():
    global n
    lock.acquire()
    temp=n
    time.sleep(0.1)
    n=temp-1
    lock.release()
if __name__ == '__main__':
    lock=Lock()
    n=100
    l=[]
    for i in range(100):
        p=Thread(target=work)
        l.append(p)
        p.start()
    for p in l:
        p.join()
    print(n) #結(jié)果肯定為0,由原來的并發(fā)執(zhí)行變成串行,犧牲了執(zhí)行效率保證了數(shù)據(jù)安全,不加鎖則結(jié)果可能為99

四、GIL與多線程

有了GIL的存在,同一時(shí)刻同一進(jìn)程中只有一個(gè)線程被執(zhí)行。

聽到這里,有的同學(xué)立馬質(zhì)問:進(jìn)程可以利用多核,但是開銷大,而python的多線程開銷小,但卻無法利用多核優(yōu)勢,也就是說python沒用了,php才是最牛逼的語言?

別著急,還沒講完呢。

要解決這個(gè)問題,我們需要在幾個(gè)點(diǎn)上達(dá)成一致:

1、cpu到底是用來做計(jì)算的,還是用來做I/O的?
2、多cpu,意味著可以有多個(gè)核并行完成計(jì)算,所以多核提升的是計(jì)算性能
3、每個(gè)cpu一旦遇到I/O阻塞,仍然需要等待,所以多核對(duì)I/O操作沒什么用處

一個(gè)工人相當(dāng)于cpu,此時(shí)計(jì)算相當(dāng)于工人在干活,I/O阻塞相當(dāng)于為工人干活提供所需原材料的過程,工人干活的過程中如果沒有原材料了,則工人干活的過程需要停止,直到等待原材料的到來。

如果你的工廠干的大多數(shù)任務(wù)都要有準(zhǔn)備原材料的過程(I/O密集型),那么你有再多的工人,意義也不大,還不如一個(gè)人,在等材料的過程中讓工人去干別的活。

反過來講,如果你的工廠原材料都齊全,那當(dāng)然是工人越多,效率越高

結(jié)論:

1、對(duì)計(jì)算來說,cpu越多越好,但是對(duì)于I/O來說,再多的cpu也沒用
2、當(dāng)然對(duì)運(yùn)行一個(gè)程序來說,隨著cpu的增多執(zhí)行效率肯定會(huì)有所提高(不管提高幅度多大,總會(huì)有所提高),這是因?yàn)橐粋€(gè)程序基本上不會(huì)是純計(jì)算或者純I/O,所以我們只能相對(duì)的去看一個(gè)程序到底是計(jì)算密集型還是I/O密集型,從而進(jìn)一步分析python的多線程到底有無用武之地

假設(shè)我們有四個(gè)任務(wù)需要處理,處理方式肯定是要玩出并發(fā)的效果,解決方案可以是:

方案一:開啟四個(gè)進(jìn)程
方案二:一個(gè)進(jìn)程下,開啟四個(gè)線程

單核情況下,分析結(jié)果:

1、如果四個(gè)任務(wù)是計(jì)算密集型,多核意味著并行計(jì)算,在python中一個(gè)進(jìn)程中同一時(shí)刻只有一個(gè)線程執(zhí)行用不上多核,方案一勝
2、如果四個(gè)任務(wù)是I/O密集型,再多的核也解決不了I/O問題,方案二勝

結(jié)論:

現(xiàn)在的計(jì)算機(jī)基本上都是多核,python對(duì)于計(jì)算密集型的任務(wù)開多線程的效率并不能帶來多大性能上的提升,甚至不如串行(沒有大量切換),但是,對(duì)于IO密集型的任務(wù)效率還是有顯著提升的。

五、多線程性能測試

如果并發(fā)的多個(gè)任務(wù)是計(jì)算密集型:多進(jìn)程效率高

#test.py內(nèi)容
import os,time
print(os.getpid())
time.sleep(1000)
#打開終端執(zhí)行
python3 test.py
#在windows下查看
tasklist |findstr python
#在linux下下查看
ps aux |grep python0

如果并發(fā)的多個(gè)任務(wù)是I/O密集型:多線程效率高

#test.py內(nèi)容
import os,time
print(os.getpid())
time.sleep(1000)
#打開終端執(zhí)行
python3 test.py
#在windows下查看
tasklist |findstr python
#在linux下下查看
ps aux |grep python1

應(yīng)用:

#test.py內(nèi)容
import os,time
print(os.getpid())
time.sleep(1000)
#打開終端執(zhí)行
python3 test.py
#在windows下查看
tasklist |findstr python
#在linux下下查看
ps aux |grep python2
。轉(zhuǎn)載請注明來源地址:黑帽SEO http://www.790079.com 專注于SEO培訓(xùn),快速排名
黑帽WiKi_黑帽百科(www.790079.com),8年黑帽SEO優(yōu)化技術(shù),黑帽seo快速排名,黑帽SEO技術(shù)培訓(xùn)學(xué)習(xí),黑帽SEO快速排名程序、泛目錄寄生蟲技術(shù),贈(zèng)送免費(fèi)黑帽SEO視頻教程

(黑帽seo技術(shù),網(wǎng)站快速排名,蜘蛛池加速收錄,目錄程序定制)

掃一下添加微信:



協(xié)助本站SEO優(yōu)化一下,謝謝!
關(guān)鍵詞不能為空

免責(zé)聲明

資料匯總于網(wǎng)絡(luò),如有侵權(quán) 聯(lián)系站長刪除 http://www.790079.com

同類推薦
站點(diǎn)信息
標(biāo)簽列表
網(wǎng)站分類
友情鏈接
久久久国产一区_国产综合久久久久_欧美亚洲丝袜_成人综合国产精品
一区二区三区电影| 国产又大又硬又粗| 亚洲国产一区二区三区在线| 国产欧美在线视频| 国产99久久精品一区二区 | 亚洲蜜桃在线| 综合久久国产| 尤物国产精品| 国产z一区二区三区| 亚洲视频导航| 日韩中文字幕在线观看| 免费一级特黄特色毛片久久看| 欧美精品在线极品| 成人免费观看毛片| 日韩av电影在线观看| 国产精品天天av精麻传媒| 国产做受69高潮| 激情视频小说图片| 亚洲精品免费在线视频| 亚洲精品在线观看免费| 午夜精品久久久内射近拍高清| 国产精品偷伦一区二区| 国产精品丝袜一区二区三区| 国产精品国产亚洲精品看不卡15| 国产欧美日韩综合一区在线观看| 欧美国产视频在线观看| 亚洲乱码中文字幕久久孕妇黑人| 久久久久久com| 色噜噜一区二区| 国产精品国产亚洲精品看不卡15| 国产精品户外野外| 在线精品亚洲一区二区| 日产国产精品精品a∨| 欧美精品一区免费| 国产精品亚洲激情| 国产成人亚洲精品| 国产久一一精品| 经典三级在线视频| 国产欧美一区二区三区不卡高清| 成人免费毛片网| 欧美巨大黑人极品精男| 久久精品国产久精国产思思| 国产精品国产福利国产秒拍| 一本久道久久综合| 日韩极品视频在线观看| 一本色道久久88亚洲精品综合| 亚洲欧洲三级| 青青在线免费视频| 日本一区网站| 黄色动漫网站入口| 久久久影院一区二区三区| 韩国精品久久久999| 国产尤物91| 91国产高清在线| 国产精品一区二区三区免费观看| 91精品国产高清久久久久久91裸体| 久久久99精品视频| 色中色综合影院手机版在线观看| 日本人妻伦在线中文字幕| 国产一级黄色录像片| 男人天堂手机在线视频| 国产精品中文在线| 日韩亚洲欧美中文高清在线| 一区二区三区三区在线| 欧美性猛交久久久乱大交小说| 日本欧美一二三区| 国产深夜男女无套内射| 久久久久免费网| 国产成人精品久久亚洲高清不卡| 色婷婷综合成人| 中文字幕无码精品亚洲资源网久久 | 国产精品有限公司| 久久久久久久有限公司| 亚洲一区二区三区精品动漫| 精品少妇人妻av一区二区| 久久久久久久久久久免费精品 | 亚洲色成人www永久在线观看| 欧美一级二级三级九九九| www.浪潮av.com| 国产精品一区=区| 日韩中文在线中文网三级| 亚洲熟妇无码一区二区三区导航| 精品欧美国产一区二区三区不卡| 久久视频免费在线| 真实国产乱子伦对白视频| 欧美视频第三页| 91精品国产777在线观看| 欧美日韩国产123| 国产在线999| 国产精品日韩欧美一区二区| 久久精品国产成人精品| 亚洲精品在线视频观看| 国产欧美一区二区白浆黑人| 国产精品第一视频| 黄色一级二级三级| 精品国产视频在线| 国产精品久久久久久久免费大片| 久久91亚洲精品中文字幕奶水| 欧美日韩高清在线一区| 日韩在线免费av| 日本久久久a级免费| 欧美国产二区| 色青青草原桃花久久综合| 日韩国产在线一区| 久久久精品国产网站| 欧美久久久久久久| 久久久久久久国产精品| 日本精品免费在线观看| 国产成人97精品免费看片| 欧美一乱一性一交一视频| 97久久精品人人澡人人爽缅北 | 国产天堂视频在线观看| 国产精品久久中文字幕| 狠狠色狠狠色综合人人| 国产精品久久久久久久久久尿| 欧美激情专区| 久久这里有精品| 国产日韩亚洲欧美| 久久夜色精品国产欧美乱| 麻豆一区区三区四区产品精品蜜桃| 国产精品区免费视频| 国产一区二区在线免费| 伊人久久大香线蕉综合75| 91久久久久久久久久| 欧美激情视频网站| 高清欧美精品xxxxx| 深夜精品寂寞黄网站在线观看| 日韩中文字幕精品| 国产精品中文久久久久久久| 久久免费高清视频| 国产v亚洲v天堂无码久久久| 久久亚洲影音av资源网| 俺去啦;欧美日韩| 蜜月aⅴ免费一区二区三区 | www.九色.com| 国产精品久久久久高潮| 国产欧美日韩精品丝袜高跟鞋| 亚洲精品免费av| 国产精品偷伦一区二区| 国产精品一区二区三区精品| 欧美一区二区色| 国产精品女主播视频| 99精品视频在线看| 欧美v在线观看| 亚洲啊啊啊啊啊| 久久在精品线影院精品国产| 久久久爽爽爽美女图片| 免费日韩中文字幕| 午夜精品一区二区在线观看| 国产精品老女人精品视频| 国产精品一区二区三区免费视频| 日本一区二区三区免费看| 国产精品第七影院| 久久精品99久久| 国产乱人伦真实精品视频| 日韩一二三区不卡在线视频| 久久艳片www.17c.com| 久久久久国产精品熟女影院| 国产一区二区不卡视频在线观看 | 亚洲aaa激情| 国产精品对白刺激| 国产成人亚洲欧美| 高清一区二区三区日本久| 欧美精品二区三区四区免费看视频| 久久综合电影一区| 久久精品国产理论片免费| 99在线看视频| 国内精品模特av私拍在线观看| 亚洲一区二区三区在线观看视频| 国产精品久久电影观看| 国产成人亚洲欧美| 成人欧美一区二区| 精品亚洲欧美日韩| 品久久久久久久久久96高清| 性欧美在线看片a免费观看| 一区二区三区四区国产| 国产精品免费网站| 久久久久久有精品国产| 91看片淫黄大片91| 国模极品一区二区三区| 欧美日韩成人一区二区三区| 日本三级中文字幕在线观看| 亚洲精品欧洲精品| 欧美激情一级精品国产| 国产精品福利网| 国产精品日韩欧美大师| 日韩有码视频在线| 久久久久久综合网天天| 久久精品无码中文字幕| 久久综合久久网| 69精品小视频| 国产成人精品久久亚洲高清不卡| 91精品国产高清自在线| 91精品久久久久久蜜桃| 国产精品在线看| 成人av影视在线| 亚洲av综合色区| 亚洲精品成人自拍| 亚洲激情一区二区| 手机看片福利永久国产日韩|