Python很慢和/或它不是的兩個(gè)最常見(jiàn)的原因高性能:
解讀
GIL
第一個(gè)是相當(dāng)直接的,但在高級(jí)別編譯器將更高級(jí)別的語(yǔ)言翻譯成更低級(jí)別(更快)的語(yǔ)言,因此編譯語(yǔ)言幾乎總是比非編譯語(yǔ)言執(zhí)行得更快。這個(gè)經(jīng)驗(yàn)法則有一些例外(例如JIT可能比AOT編譯更快的情況),但它們會(huì)分散討論。
第二個(gè)是更臭名昭著,但是Python有一個(gè)叫做全局解釋器鎖的東西,它通過(guò)強(qiáng)制解釋器一次只在一個(gè)進(jìn)程(Python解釋器的實(shí)例)中執(zhí)行單個(gè)線程來(lái)基本上防止多線程。它的工作原理也很有趣,但也像編譯器一樣切入兔子洞。
Python性能下降9/10倍并不重要。
隨著時(shí)間的推移,我認(rèn)為有兩個(gè)主要原因。
首先,重要的不是代碼執(zhí)行時(shí)間,而是最終用戶(hù)體驗(yàn)。它不一般的問(wèn)題,如果一個(gè)函數(shù)具有0.001秒或0.01來(lái)執(zhí)行。在這種情況下,對(duì)于大多數(shù)問(wèn)題,可以使用水平擴(kuò)展來(lái)解決Python創(chuàng)建的許多瓶頸。
以這些基準(zhǔn)為例對(duì)于流行的Web框架。使用Python的最好的是650.5K req / s,而最好的數(shù)字是2.2M。純粹從性能的角度來(lái)看,你可能想知道為什么你不會(huì)選擇最快的,但是你看看那個(gè)#1點(diǎn)并意識(shí)到它正在使用C. C是一種很棒的語(yǔ)言(IMO),但是Python很多更具表現(xiàn)力,擁有更大的生態(tài)系統(tǒng),您可以選擇使用預(yù)先構(gòu)建的工具。因此,在犧牲開(kāi)發(fā)時(shí)間/范圍的同時(shí),不是從服務(wù)器中擠出最后一點(diǎn)計(jì)算能力,而是可以為每1個(gè)需要C的服務(wù)器獲得4臺(tái)Python服務(wù)器,并節(jié)省開(kāi)發(fā)人員生產(chǎn)力和開(kāi)發(fā)時(shí)間的許多倍。這顯然是一個(gè)戲劇性和極其簡(jiǎn)化的例子,但我認(rèn)為這一點(diǎn)是合理的。
這讓我們圍繞GIL的第二個(gè)實(shí)現(xiàn)和我的結(jié)論,它確實(shí)并沒(méi)有那么糟糕。
通過(guò)不允許多線程(或在同一進(jìn)程中同時(shí)執(zhí)行),Python大大簡(jiǎn)化了開(kāi)發(fā)人員面臨的編程復(fù)雜性。 開(kāi)發(fā)人員可以忽略多線程進(jìn)程的常見(jiàn) 問(wèn)題和優(yōu)化,因?yàn)镻ython解釋器一次只能執(zhí)行一個(gè)邏輯。
這也通常不會(huì)多大關(guān)系為同一水平推理點(diǎn)1而不是解決與多線程問(wèn)題,您可以選擇與解決問(wèn)題的多重處理。您可以啟動(dòng)多個(gè)進(jìn)程并在它們之間進(jìn)行通信,而不是在單個(gè)進(jìn)程中管理多個(gè)線程。差異很微妙,但同樣,對(duì)于這些情況中的9/10,多處理與線程的性能開(kāi)銷(xiāo)并不重要。
在頭頂性能的情況下做的事情,你可以隨時(shí)“膠水”不同的語(yǔ)言為你的Python邏輯。典型的例子是Numpy如何通過(guò)放入C將高性能數(shù)組結(jié)構(gòu)數(shù)據(jù)結(jié)構(gòu)帶到Python。
那么這一切又是什么呢?
隨著計(jì)算能力(處理器核心的數(shù)量,單個(gè)核心的速度,服務(wù)器硬件的成本等)越來(lái)越便宜,大多數(shù)性能問(wèn)題通常可以通過(guò)水平擴(kuò)展來(lái)解決。
對(duì)于你無(wú)法橫向解決的事情,你可以用不同的語(yǔ)言寫(xiě)一些東西并將其“粘合”到你的Python邏輯中(假設(shè)Python是一種“膠水”語(yǔ)言)。
因此,如果最終可以增強(qiáng)/處理性能,那么您需要將Python作為一種語(yǔ)言的主要原因:
簡(jiǎn)單
生產(chǎn)的
可讀(從而更易于維護(hù))
關(guān)于Python的優(yōu)點(diǎn)和缺點(diǎn),我們可以談?wù)摳嗟膬?nèi)容,我們可以更詳細(xì)地討論,但我認(rèn)為這是解決為什么Python解釋器性能不會(huì)影響其受歡迎程度的問(wèn)題的良好開(kāi)端。
文章來(lái)于quora
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號(hào)聯(lián)系: 360901061
您的支持是博主寫(xiě)作最大的動(dòng)力,如果您喜歡我的文章,感覺(jué)我的文章對(duì)您有幫助,請(qǐng)用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點(diǎn)擊下面給點(diǎn)支持吧,站長(zhǎng)非常感激您!手機(jī)微信長(zhǎng)按不能支付解決辦法:請(qǐng)將微信支付二維碼保存到相冊(cè),切換到微信,然后點(diǎn)擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對(duì)您有幫助就好】元
