python線程鎖和全局鎖 為什么有人說(shuō)Python的多線程是雞肋呢?
為什么有人說(shuō)Python的多線程是雞肋呢?Gil lock限制了進(jìn)程中的不同線程在同一時(shí)間只能占用一個(gè)CPU??梢钥闯?,當(dāng)使用多線程處理計(jì)算密集型任務(wù)時(shí),Python中的多個(gè)線程需要相互等待以獲得CP
為什么有人說(shuō)Python的多線程是雞肋呢?
Gil lock限制了進(jìn)程中的不同線程在同一時(shí)間只能占用一個(gè)CPU??梢钥闯觯?dāng)使用多線程處理計(jì)算密集型任務(wù)時(shí),Python中的多個(gè)線程需要相互等待以獲得CPU資源。在這個(gè)時(shí)候,多線程不能并行,我們真的不具備預(yù)期的多線程能力。
但是,如果執(zhí)行的是Io密集型任務(wù),多個(gè)線程之間沒(méi)有太多CPU資源爭(zhēng)用,更多的是每個(gè)線程都在進(jìn)行Io傳輸和等待,此時(shí),多線程的能力還是可以發(fā)揮出來(lái)的。
所以我們不能簡(jiǎn)單地說(shuō)Python的多線程是雞肋,但是它的設(shè)計(jì)限制了它的應(yīng)用場(chǎng)景。
python除了互斥鎖還有什么鎖?
Python提供“可重入鎖”:線程.RLock. RLOCK在內(nèi)部維護(hù)一個(gè)鎖和一個(gè)計(jì)數(shù)器變量。計(jì)數(shù)器記錄請(qǐng)求數(shù),以便可以多次需要資源。在釋放一個(gè)線程的所有獲取之前,其他線程可以獲取資源。這里,以示例1為例。如果使用RLOCK而不是lock,則不會(huì)發(fā)生死鎖
python多線程為什么沒(méi)有并行?
1. 什么是吉爾?
??Gil的全名是global interpreter lock(global interpreter lock),源于Python設(shè)計(jì)之初的考慮和對(duì)數(shù)據(jù)安全的決策。
2. 每個(gè)CPU只能同時(shí)執(zhí)行一個(gè)線程
??事實(shí)上,單核CPU下的多線程只是并發(fā),而不是并行。并發(fā)性和并行性是同時(shí)處理多個(gè)請(qǐng)求的概念。但是并發(fā)和并行之間有區(qū)別。并行意味著兩個(gè)或多個(gè)事件同時(shí)發(fā)生,而并發(fā)意味著兩個(gè)或多個(gè)事件在同一時(shí)間間隔發(fā)生。
百度搜索圈t社區(qū)(www.aiquanti.com)免費(fèi)視頻教程