欧美经典成人在观看线视频_嫩草成人影院_国产在线精品一区二区中文_国产欧美日韩综合二区三区

電腦存儲(chǔ)空間的kb、mb怎么念?兆是什么意思?

電腦存儲(chǔ)空間的kb、mb怎么念?兆是什么意思?

喻思松 2025-06-27 智能 34 次瀏覽 0個(gè)評(píng)論

我 相 信 這 么 優(yōu)秀 的 你

已 經(jīng) 置 頂了 我

  文/王棟

  轉(zhuǎn)自硅谷程序汪,已獲作者授權(quán),拒絕二次轉(zhuǎn)載

  一周前,我面試了一個(gè)來(lái)自W Labs的Lead Big Data Engineer,問(wèn)了他一個(gè)問(wèn)題:在一維數(shù)組里找滿(mǎn)足條件的最長(zhǎng)子數(shù)組,很不幸,這個(gè)Lead Engineer在45分鐘內(nèi)連暴力解法都沒(méi)有寫(xiě)出來(lái),于是在結(jié)束面試前五分鐘,我打住了他。

  他和我說(shuō):現(xiàn)在大家都在處理大數(shù)據(jù),在Hadoop,Spark上跑程序,我們?cè)谶@做算法題,優(yōu)化程序的目的是什么?

電腦存儲(chǔ)空間的kb、mb怎么念?兆是什么意思?

  我當(dāng)時(shí)著急結(jié)束面試,草草回答他說(shuō):我只是測(cè)試你的編程基礎(chǔ)。

  的確,從我13年開(kāi)始工作到17年這四年,從內(nèi)存里讀1MB數(shù)據(jù)時(shí)間從15us降到6us;機(jī)器學(xué)習(xí)算法從跑在64核CPU變成了$8000的NVIDIA Tesla P100;Amazon服務(wù)器帶寬從50MB提升到了1GB。

  硬件提升如此迅猛,而我們還要在面試的時(shí)候進(jìn)行白板測(cè)試,優(yōu)化算法,提升程序性能做什么?

程序的價(jià)值是什么?

  

  有一天我和Uber的工程師??王聊代碼,他開(kāi)篇就說(shuō),我加入U(xiǎn)ber前沒(méi)見(jiàn)過(guò)那么屎的代碼,但就是這個(gè)代碼撐起了60B的共享經(jīng)濟(jì)帝國(guó)。

  由此可見(jiàn),程序的優(yōu)美性只是寫(xiě)代碼要考慮的一個(gè)小問(wèn)題,最重要的是代碼自身的價(jià)值。

  很多時(shí)候優(yōu)化程序性能并不重要。如果你是一個(gè)Uber工程師,負(fù)責(zé)結(jié)賬功能的系統(tǒng)設(shè)計(jì),因?yàn)槊棵胄枰幚淼恼?qǐng)求并不多,所以要解決的問(wèn)題的難度比微信紅包,支付寶要簡(jiǎn)單不止一個(gè)數(shù)量級(jí),在這種時(shí)候,考慮程序的性能可能是多此一舉。

  著名的Pareto's Law,應(yīng)用到程序里面就是“20%的代碼占用了80%的運(yùn)行時(shí)間”。這個(gè)現(xiàn)象在互聯(lián)網(wǎng)公司可能會(huì)更加極端-1%的代碼占據(jù)了99%的運(yùn)行時(shí)間。

  說(shuō)到這,我們可以得出這樣一個(gè)結(jié)論:大部分的代碼都是不需要考慮性能優(yōu)化或者存儲(chǔ)優(yōu)化的。

  但是!

  對(duì)于剩下的那么一小部分代碼來(lái)說(shuō),優(yōu)化是非常重要的,好的工程師能看到優(yōu)化帶去的經(jīng)濟(jì)價(jià)值,而不是僅僅停留在優(yōu)化代碼的層面上。

  好的優(yōu)化是可以量化的

  

  人們認(rèn)識(shí)問(wèn)題最直接的方式就是列數(shù)據(jù),分析經(jīng)濟(jì)價(jià)值。

  從正面來(lái)看性能優(yōu)化是很值錢(qián)的,Apple網(wǎng)站上15寸的MacBook Pro有兩種型號(hào),2.6G CPU要$2399,2.7G CPU要$2799。除去不到$150的硬盤(pán)差價(jià),你需要花10%更多的價(jià)格來(lái)得到字面上不到4%的性能提升,而且這4%的性能還不一定能從日常使用中體現(xiàn)出來(lái)。

  從反證的角度來(lái)看,如果程序性能不重要,我們用更快的電腦更短時(shí)間運(yùn)行完程序并沒(méi)有額外價(jià)值。那么一個(gè)擁有16核的服務(wù)器應(yīng)該和一個(gè)擁有8核的服務(wù)器一樣貴,但實(shí)際上Amazon的c4.4x價(jià)格剛好是c4.2x價(jià)格的兩倍。

  現(xiàn)在大家都在使用云服務(wù),每個(gè)月的收費(fèi)是根據(jù)你的存儲(chǔ)空間使用和CPU消耗使用計(jì)算的,你的每一個(gè)優(yōu)化都可以被轉(zhuǎn)化成美金計(jì)算出來(lái)。Buffer就發(fā)表過(guò)一篇工程師文章《How We Saved $132k a Year With an IT Infrastructure Audit》談優(yōu)化節(jié)約了多少經(jīng)費(fèi)。

  另一種衡量方法就是去看用戶(hù)多喜歡你的產(chǎn)品。長(zhǎng)久以來(lái)Microsoft的IE瀏覽器一直是市場(chǎng)霸主,但最近已經(jīng)被Google的Chrome瀏覽器后來(lái)居上了。在眾多人們喜歡用Chrome的原因里,排名第一的就是Chrome的啟動(dòng)速度,網(wǎng)頁(yè)加載速度遠(yuǎn)勝于其他瀏覽器。

  著名的獨(dú)角獸公司Pinterest也發(fā)過(guò)一篇Blog,談一系列hack的方法是如何將手機(jī)網(wǎng)頁(yè)加載效率提升了60%,與此同時(shí)帶來(lái)了40%手機(jī)網(wǎng)頁(yè)端用戶(hù)轉(zhuǎn)化率增長(zhǎng)。

  所以說(shuō),天下武功唯快不破。

  加機(jī)器并不是優(yōu)化性能的良藥

  

  有的不懂技術(shù)的人有這樣的認(rèn)識(shí)誤區(qū),我們可以用加機(jī)器,加內(nèi)存,加CPU這樣的方法加速程序,加大吞吐量。但哪怕Amadhl定律不約束并行程序效率,讓程序正確的運(yùn)行在多核,多臺(tái)機(jī)器上也還是一個(gè)困難的問(wèn)題。

  投入更多的機(jī)器是一種提升性能的方法,但是既不便宜,也不簡(jiǎn)單。

  考慮這么兩種實(shí)際情況,一種是在單機(jī)上運(yùn)行并行程序,最初我們可以從1 core變成3 core,將程序的性能提升一倍,但是如果你還想再提升一倍,那可能要16 core,因?yàn)槌绦虿坏貌幻鎸?duì)多核帶來(lái)的額外開(kāi)銷(xiāo),兼容性和調(diào)試的困難性。

  另一種情況是常見(jiàn)的搜索引擎,當(dāng)我們使用5臺(tái)計(jì)算機(jī)來(lái)進(jìn)行搜索時(shí),整個(gè)集群的P95耗時(shí)由單機(jī)的P99耗時(shí)決定,當(dāng)我們采用10臺(tái)計(jì)算機(jī)來(lái)搜索時(shí),雖然每臺(tái)計(jì)算機(jī)處理的文檔減半了,但整個(gè)集群的P95耗時(shí)變成了單機(jī)的P99.5耗時(shí),說(shuō)不定latency就從100ms變成了200ms。

  這樣看來(lái),將單線程的代碼性能提高一倍在某些情況下意味著更大的經(jīng)濟(jì)價(jià)值,增加更多的硬件并不是提升性能的魔法,好的工程??才是。

  那高級(jí)語(yǔ)言的性能怎么樣?

  

  有人說(shuō),今天最流行的編程語(yǔ)言就是Python和Java了,但是他們的運(yùn)行效率都比老牌語(yǔ)言C/C++差,這難道不是一個(gè)程序效率不重要的表現(xiàn)么?

  我想要說(shuō),在你用著高級(jí)語(yǔ)言快速開(kāi)發(fā)的時(shí)候,無(wú)數(shù)的程序員都在想著幫你優(yōu)化他們的運(yùn)行效率。對(duì)于Python,有人研究Cython,有人研究Pypy,從底層優(yōu)化Python的程序效率;對(duì)于Java,越來(lái)越多的公司都在通過(guò)優(yōu)化它來(lái)優(yōu)化網(wǎng)頁(yè)速度,優(yōu)化用戶(hù)轉(zhuǎn)化率,很多新的框架都在強(qiáng)調(diào)效率提升。

  在你使用高級(jí)語(yǔ)言,寫(xiě)著更簡(jiǎn)單,更安全的代碼時(shí),你可能沒(méi)有看到,在最近的十五年來(lái),Java在瀏覽器里的運(yùn)行速度提升了兩個(gè)數(shù)量級(jí),在Benchmarks Game的網(wǎng)站上,Node.js處理正則表達(dá)式之比C++慢3倍而已。

  我們是不是也可以認(rèn)為這些年來(lái)Java變得越來(lái)越流行,一部分也是因?yàn)樗倪\(yùn)行效率在不斷地提升。如果Java還和以前一樣慢,那估計(jì)現(xiàn)在沒(méi)有什么人會(huì)繼續(xù)使用了。

  說(shuō)到這里,我想向所有奮戰(zhàn)在internal tools的同事致敬,他們雖然很少實(shí)現(xiàn)面向用戶(hù)的功能,但是他們實(shí)現(xiàn)的功能幫助其他工程??節(jié)約了很多時(shí)間。

  貪婪的程序員要求越來(lái)越高

  

  還有一個(gè)讓人們忽視程序運(yùn)行效率的因素就是著名的Moore定律,處理器和存儲(chǔ)讀寫(xiě)會(huì)越來(lái)越快,誰(shuí)還在意現(xiàn)在的程序效率呢?我們只需要用對(duì)的算法寫(xiě)干凈的代碼就可以了。

  在1990年的時(shí)候,人們想讓程序下國(guó)際象棋,那時(shí)候這是一個(gè)很困難的問(wèn)題。你可能要在C++的代碼里加入一些匯編代碼進(jìn)行優(yōu)化,才能幫助計(jì)算機(jī)在短時(shí)間內(nèi)做出決策。但是今天,你可以直接用Python寫(xiě)一個(gè)搜索程序來(lái)下國(guó)際象棋,并且戰(zhàn)勝大部分人。

  電腦一天一天的在變快,人們的需求也在一天天的變大,十幾年前我們想讓計(jì)算機(jī)下國(guó)際象棋,下中國(guó)象棋,并且說(shuō)下圍棋是很難解決的問(wèn)題,因?yàn)閲宓乃阉骺臻g太大。但是如今我們已經(jīng)可以用復(fù)雜的神經(jīng)網(wǎng)絡(luò)配上龐大的集群,打敗每一個(gè)圍棋大師。

  同樣的道理也可以用在手機(jī)上,手機(jī)性能每一年都在提高,我們對(duì)手機(jī)的使用需求也隨著性能增加。讀初中,高中的時(shí)候我只在手機(jī)上玩黑白的貪吃蛇游戲,如今我們則玩著3d的戰(zhàn)略游戲,發(fā)送著語(yǔ)音命令...

  可以想象,在不遠(yuǎn)的將來(lái)我們可能還會(huì)在手表上運(yùn)行一些機(jī)器學(xué)習(xí)程序,幫助你做出一些決策,如果我們不優(yōu)化我們代碼的耗能,手機(jī)還能堅(jiān)持12小時(shí)么?

  優(yōu)化是讓處理器閑下來(lái)

  

  最后一種說(shuō)法,我們的處理器大部分時(shí)間處于空閑狀態(tài),即使程序慢,我們也可以讓CPU運(yùn)行更長(zhǎng)時(shí)間來(lái)彌補(bǔ)。

  回?fù)暨@種想法只要打一個(gè)不恰當(dāng)?shù)谋确剑銜?huì)覺(jué)得買(mǎi)一個(gè)高級(jí)跑車(chē)但是長(zhǎng)時(shí)間只放在車(chē)庫(kù)里很傻么?

  在計(jì)劃你的網(wǎng)站需要多么大的集群支持時(shí),都會(huì)為他準(zhǔn)備很多備用的計(jì)算資源,要是不這樣設(shè)計(jì),運(yùn)行程序就變成了去擁擠的超市里買(mǎi)菜,大家都在排著隊(duì),從停車(chē)場(chǎng)到收銀臺(tái),排一整天。

  我們也都經(jīng)歷過(guò)電腦CPU占用率達(dá)到100%的狀態(tài),機(jī)器變熱而且任何程序都不響應(yīng),你只能無(wú)奈的等著。

  如果搜索引擎的處理器在100%的狀態(tài)下運(yùn)行著,那么新來(lái)的請(qǐng)求就會(huì)被放在隊(duì)列里,導(dǎo)致更多處理器切換造成了額外的消耗,最終服務(wù)器會(huì)徹底奔潰。

  所以從設(shè)計(jì)的角度來(lái)看,我們需要我們的處理器處于空閑狀態(tài),有足夠多余的計(jì)算能力。

電腦存儲(chǔ)空間的kb、mb怎么念?兆是什么意思?

  對(duì)程序的優(yōu)化就是讓處理器閑下來(lái),更好的代碼幫助用戶(hù)更快的得到結(jié)果,并且消耗更少的資源。

  結(jié)語(yǔ)

  開(kāi)了這么久腦洞,回到最初的面試。

  我們有很多方法去衡量一個(gè)人,他是否對(duì)產(chǎn)品有準(zhǔn)確的理解,他是否有創(chuàng)造力,他是否理解用戶(hù)最需要的是什么。但如果單純衡量程序員,我們可以由簡(jiǎn)單的兩點(diǎn)看起,他的程序是否運(yùn)行正確,他的程序是否高效。

  好的程序員能夠生產(chǎn)正確并且高效的代碼,這個(gè)定義看起來(lái)很簡(jiǎn)單,但其實(shí)也是最難的。因?yàn)橐坏┠憧梢誀奚绦虻恼_性或者程序的效率,那很多問(wèn)題都會(huì)變得更簡(jiǎn)單,就好像CAP理論里一旦放棄一個(gè)要求,就有很好的實(shí)現(xiàn)方案。

  所以,在下次面試的時(shí)候不要放棄優(yōu)化你的代碼。

  在這里著重推薦一個(gè)我喜歡的blog,Daniel Lemire教授的《Does Software Performance Still Matter》,這是這篇文章整個(gè)骨干和靈感來(lái)源,我只是在里面加入了更多個(gè)人感受。

  課外資料:

  https://lemire.me/blog/2017/03/20/does-software-performance-still-matter/

  https://benchmarksgame.alioth.debian.org/u64q/compare.php?lang=node&lang2=gpp

  https://overflow.buffer.com/2016/03/31/how-we-saved-132k-a-year-by-spring-cleaning-our-back-end/

  https://medium.com/@Pinterest_Engineering/driving-user-growth-with-performance-improvements-cfc50dafadd7

  作者介紹

  王棟

  清華大學(xué)姚班07級(jí),信息學(xué)競(jìng)賽國(guó)際金牌。目前任職于硅谷電商網(wǎng)站W(wǎng)ish,專(zhuān)注搜索推薦算法及系統(tǒng)設(shè)計(jì)。曾任獨(dú)角獸公司Pinterest搜索排名負(fù)責(zé)人,帶領(lǐng)團(tuán)隊(duì)設(shè)計(jì)和實(shí)現(xiàn)了高度可擴(kuò)展的搜索平臺(tái),以及機(jī)器學(xué)習(xí)搜索結(jié)果排名算法。

—————END—————

看完本文有意思?請(qǐng)分享給更多人

  小伙伴們,你怎么看!

轉(zhuǎn)載請(qǐng)注明來(lái)自夕逆IT,本文標(biāo)題:《電腦存儲(chǔ)空間的kb、mb怎么念?兆是什么意思?》

每一天,每一秒,你所做的決定都會(huì)改變你的人生!

發(fā)表評(píng)論

快捷回復(fù):

評(píng)論列表 (暫無(wú)評(píng)論,34人圍觀)參與討論

還沒(méi)有評(píng)論,來(lái)說(shuō)兩句吧...