<kbd id="afajh"><form id="afajh"></form></kbd>
<strong id="afajh"><dl id="afajh"></dl></strong>
    <del id="afajh"><form id="afajh"></form></del>
        1. <th id="afajh"><progress id="afajh"></progress></th>
          <b id="afajh"><abbr id="afajh"></abbr></b>
          <th id="afajh"><progress id="afajh"></progress></th>

          是的,Python是慢,但我不在乎

          共 2513字,需瀏覽 6分鐘

           ·

          2020-10-24 08:45

          ??

          幾年前我做運(yùn)維時(shí)用到?Python,從此便成為 Python 的狂熱分子,工作上能用程序自動(dòng)化實(shí)現(xiàn)的,我都盡可能積極的使用 Python,極大的提高了工作效率,不知道的以為我的工作是個(gè)閑職,導(dǎo)致我“丟”掉了運(yùn)維崗位,也罷,重復(fù)的事情做多了也就乏味了。



          慢慢的我知道了 GIL,也通過嘗試知道了在計(jì)算密集行任務(wù)方面,Python 的性能表現(xiàn)的確不如 Java,Golang 等靜態(tài)語言,有人也因此拒絕嘗試使用 Python,但是從我自身的經(jīng)歷來看,Python 并未讓我覺得慢,即使與其他語言相比,有點(diǎn)慢,但我并不在乎,原因如下:


          一、速度不再那么重要。


          過去,程序要花很長(zhǎng)時(shí)間才能運(yùn)行。CPU、內(nèi)存都很昂貴,程序的運(yùn)行時(shí)間是一個(gè)非常重要的指標(biāo),電腦非常貴,運(yùn)行它們的電費(fèi)也很貴,而商業(yè)永恒不變的法制就是---優(yōu)化你最貴的那部分資源。從歷史來看,最昂貴的計(jì)算機(jī)的運(yùn)行時(shí)間,這也是商業(yè)和科學(xué)研究的重點(diǎn),算法,編譯優(yōu)化,都是為了讓程序更快的完成。


          現(xiàn)在計(jì)算機(jī)不那么貴了,每個(gè)人都有了自己的電腦,不少人都有了自己的個(gè)人網(wǎng)站(服務(wù)器),硬件的性能也像摩爾定律那樣提升了很多,計(jì)算機(jī)的運(yùn)行時(shí)間不在昂貴,而昂貴的是你的時(shí)間,本質(zhì)上講,老板雇傭你,就是購(gòu)買的你的可支配時(shí)間。毫無疑問,同樣的功能,Python 是最節(jié)省你的時(shí)間的。


          你也許會(huì)說,我的公司在乎速度,我創(chuàng)建了一個(gè) web 應(yīng)用程序,需要在毫秒內(nèi)響應(yīng),或者說客戶會(huì)取消下單因?yàn)槲覀兊膽?yīng)用太慢了。我并不否認(rèn)速度不再重要,我想說的是速度并不是你最昂貴的資源,最昂貴的是你的時(shí)間,或者你公司搶占市場(chǎng)的先機(jī),也就是說你的編程速度是最昂貴的資源。


          二、微服務(wù)的流行。


          像亞馬遜、谷歌、奈飛等公司都知道快速行動(dòng)的重要性,他們創(chuàng)建的業(yè)務(wù)系統(tǒng)可以快速部署和創(chuàng)新,微服務(wù)是其解決問題的方法,本文不討論是否該使用微服務(wù),但至少亞馬遜、谷歌、奈飛覺得應(yīng)該使用微服務(wù)。而微服務(wù)本來就慢,本來一個(gè)調(diào)用一個(gè)函數(shù)搞定,現(xiàn)在搞調(diào)用一個(gè)網(wǎng)絡(luò)接口。一個(gè)函數(shù)也就若干個(gè)?CPU?周期,而一個(gè)網(wǎng)絡(luò)接口卻是 TCP 的三次握手和四次揮手,如果假設(shè)一個(gè) CPU 周期是 1 秒的話,那么從加尼福利亞到紐約的網(wǎng)絡(luò)訪問時(shí)常則是 4 年。微服務(wù)最大的缺點(diǎn)就是慢,最大的優(yōu)點(diǎn)就是可以快速出產(chǎn)品,快速上市。微服務(wù)的流行正說明,產(chǎn)品迭代開發(fā)速度比程序的運(yùn)行速度更重要。


          三、CPU 已不再是瓶頸。


          如果你編寫 WEB 應(yīng)用,那么 CPU 的時(shí)間已經(jīng)不是瓶頸。還是剛才的例子,如果假設(shè)一個(gè)?CPU?周期是 1 秒的話,那么從加尼福利亞到紐約的網(wǎng)絡(luò)訪問時(shí)常則是 4 年,比如說同一數(shù)據(jù)中心內(nèi)部的網(wǎng)絡(luò)通信大約 3 毫秒,這相當(dāng)于人類的 3 個(gè)月,假設(shè)你用其他較快的編程語言 X 響應(yīng)一次請(qǐng)求需要 100000 個(gè)?CPU?周期,這相當(dāng)于人類的 1 天,也就是說總的響應(yīng)時(shí)間是 3 個(gè)月+ 1 天?,F(xiàn)在,就算 Python 比 X 慢 5 倍,也就是說總的響應(yīng)時(shí)間是?3 個(gè)月+ 5?天,你覺得區(qū)別大嗎?假如需要 3 個(gè)月后才能收到快遞,那么再多等個(gè)四天,基本上沒有多大關(guān)系。


          這就意味著,即使 Python 有點(diǎn)慢也沒關(guān)系,也就是說語言的速度( CPU 時(shí)間)幾乎不是問題,Google 對(duì)此進(jìn)行了研究并發(fā)表了論文[https://static.googleusercontent.com/media/research.google.com/en//archive/sawzall-sciprog.pdf],大致意思如下:在高吞吐量環(huán)境下使用解釋型語言看起來很矛盾,但我們發(fā)現(xiàn) CPU 時(shí)間極少是限制因素,編程語言的可表達(dá)性意味著大多數(shù)程序都很小,大部分時(shí)間都是花在 I/O 操作和本地運(yùn)行時(shí)代碼上,此外解釋型語言在允許我們將計(jì)算結(jié)果分布到許多機(jī)器上很有幫助。


          四、CPU 時(shí)間就是瓶頸怎么辦?


          你可能會(huì)說,我們遇到的問題就是 CPU 是瓶頸,導(dǎo)致 WEB 應(yīng)用訪問很慢,或者說語言 X ?就是比語言 Y 快,沒錯(cuò),有時(shí)確實(shí)如此。不過,WEB 服務(wù)器的妙處在于你幾乎可以無限制的進(jìn)行負(fù)載均衡,最簡(jiǎn)單粗暴的方法,就是升級(jí) CPU 或硬件,與你的時(shí)間相比,這些硬件非常便宜,如果一年節(jié)省你幾個(gè)星期的時(shí)間,這足以支付增加的硬件成本。


          此外 Python 還可以調(diào)用 C 語言或 Java 的函數(shù),如果你覺得某一塊慢,可以使用其他語言改寫,再用 Python 調(diào)用,此外還可以了解下 Cython,可以把 Python 代碼編譯為 C 代碼來提升速度。


          五、Python 更快嗎?


          前面一直在說,最重要的是開發(fā)時(shí)間的長(zhǎng)短,那么 Python 更快嗎?我可以明確的告訴你,Python 的生產(chǎn)率更高,它可以幫助你更專注于真正要編寫的代碼,而不會(huì)陷入細(xì)小的雜草中(你不用考慮用 vector 好還是 array 好),下面是一組數(shù)據(jù)來自一項(xiàng)研究論文:


          不同語言編寫一個(gè)字符串處理程序所花費(fèi)的時(shí)間


          可以看出 Python 的生產(chǎn)力是 Java 的 2 倍以上??梢哉f Python 比其他許多語言的生產(chǎn)力更高,主要是由于 Python 的內(nèi)省和大量的第三方庫。


          六、如果運(yùn)行時(shí)間確實(shí)有影響呢?


          有些情況下,運(yùn)行時(shí)的性能確實(shí)很重要,那就需要優(yōu)化,但不要過早優(yōu)化,在不了解瓶頸的情況下進(jìn)行優(yōu)化,成為過早優(yōu)化。過早優(yōu)化會(huì)浪費(fèi)你寶貴的時(shí)間,你應(yīng)該找到瓶頸(最昂貴的資源),然后進(jìn)行針對(duì)的優(yōu)化。


          小結(jié):


          1、針對(duì)最昂貴的資源進(jìn)行優(yōu)化,而不是計(jì)算機(jī)。

          2、選擇可以幫助快速開發(fā)的語言或框架

          3、當(dāng)你遇到性能問題時(shí)要找到瓶頸,很可能不是 CPU 或 Python 本身。

          4、如果 Python 是瓶頸(已經(jīng)優(yōu)化了算法),請(qǐng)將關(guān)鍵代碼轉(zhuǎn)至 Cython 或 C 語言。


          享受 Python 快速完成工作的過程吧!


          希望你喜歡此外,請(qǐng)點(diǎn)贊、轉(zhuǎn)發(fā)、關(guān)注支持,謝謝老鐵!

          ?
          ?
          瀏覽 75
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          評(píng)論
          圖片
          表情
          推薦
          點(diǎn)贊
          評(píng)論
          收藏
          分享

          手機(jī)掃一掃分享

          分享
          舉報(bào)
          <kbd id="afajh"><form id="afajh"></form></kbd>
          <strong id="afajh"><dl id="afajh"></dl></strong>
            <del id="afajh"><form id="afajh"></form></del>
                1. <th id="afajh"><progress id="afajh"></progress></th>
                  <b id="afajh"><abbr id="afajh"></abbr></b>
                  <th id="afajh"><progress id="afajh"></progress></th>
                  欧美一级免费A片 | www.精品在线播放国产区 | 亚洲免费在线视屏 | 天天艹| 天天综合91 |