1. 為什么下載小電影時(shí),經(jīng)常會(huì)卡在99%?

        共 2295字,需瀏覽 5分鐘

         ·

        2021-05-16 01:02

        點(diǎn)擊關(guān)注公眾號(hào),Java干貨及時(shí)送達(dá)

        真香!24W字的Java面試手冊(cè)(點(diǎn)擊查看)


        下載最怕什么,那絕對(duì)是進(jìn)度條:99%。

        這是一個(gè)充滿魔力的數(shù)字,曾讓我狂躁、焦慮,甚至激動(dòng)得想砸鍵盤(pán)錘電腦扔手機(jī)。


        比如下載學(xué)習(xí)資料或看動(dòng)作大片,苦苦等待2小時(shí),好不容易下到99%,以為2秒后就能享受大片的美妙,步入極樂(lè)世界。

        結(jié)果半小時(shí)過(guò)去了,進(jìn)度條死死卡在99%,任你千兆光纖,專線寬帶,愣是一絲不動(dòng),穩(wěn)如泰山。


        再去檢查路由器,狂按重啟鍵,發(fā)現(xiàn)網(wǎng)絡(luò)一切正常,網(wǎng)頁(yè)秒開(kāi),唯獨(dú)進(jìn)度條上的99%永恒不變。

        即使你重啟電腦,重新打開(kāi)下載軟件,重新開(kāi)始那99%的下載任務(wù),它依舊還是99%,不增不減。


        你不禁開(kāi)始疑惑:為什么進(jìn)度條總要卡在99%?為什么最后1%永遠(yuǎn)加載不動(dòng)?

        今天,要為大家破解這一千古謎題,揭開(kāi)背后不可告人的真相。


         技術(shù)原理導(dǎo)致 


        關(guān)于進(jìn)度條99%的問(wèn)題,得從它的誕生說(shuō)起。

        1896年,波蘭經(jīng)濟(jì)學(xué)家Karol Adamiecki制作了一種名叫時(shí)間表的圖,提出了早期的進(jìn)度條概念,但是當(dāng)時(shí)沒(méi)有具體的應(yīng)用。


        等到1979年,這哥們Mitchell Model在他的博士論文中提出了進(jìn)度條。


        論文里他表示:進(jìn)度條能在復(fù)雜的計(jì)算機(jī)環(huán)境中監(jiān)視系統(tǒng)行為。

        說(shuō)白了就是:進(jìn)度條能直觀展現(xiàn)電腦在做什么,做到哪種程度。


        正因?yàn)檫M(jìn)度條能用最簡(jiǎn)單的圖案和數(shù)字,表達(dá)電腦復(fù)雜的計(jì)算過(guò)程的特性,于是漸漸在各大操作系統(tǒng)流行起來(lái),成為了電腦的經(jīng)典標(biāo)志之一。

        但問(wèn)題來(lái)了,人不是電腦更不是神,再牛X的程序員也無(wú)法預(yù)測(cè)電腦什么時(shí)候完成工作。

        所以程序員開(kāi)發(fā)出來(lái)的進(jìn)度條,根本不能精準(zhǔn)地反映出電腦情況,所謂的50%、80%、90%,僅是大概的數(shù)字,預(yù)測(cè)而已。

        可以說(shuō)你看到的進(jìn)度條,和實(shí)際的進(jìn)度是兩個(gè)東西。


        對(duì)于一些可定量的項(xiàng)目,進(jìn)度條基本可以和實(shí)際相符,但不同的硬件資源和后臺(tái)程序都會(huì)相互占據(jù)資源,計(jì)算機(jī)很難恒定分配運(yùn)行,當(dāng)你影片下載到 99% 時(shí)又打開(kāi)了大型游戲,或者哪個(gè)小任務(wù)卡住了,就到了艱難的「1% 時(shí)刻」。

        其實(shí)這種 1% 隨時(shí)都在發(fā)生,但我們只對(duì)最后的 1% 印象深刻。



        它有時(shí)候前面很快,后面很慢。


        就像 U 盤(pán)復(fù)制文件,系統(tǒng)會(huì)根據(jù)文件數(shù)量和傳輸速度算好大概時(shí)間,但并不是每個(gè)百分比都執(zhí)行相同的工作,因?yàn)槊總€(gè)文件大小都不一樣,而最后 1% 可能因?yàn)檫€要驗(yàn)證文件、全盤(pán)掃描、整理數(shù)據(jù)等等,所以耗時(shí)也最久。



        它也可能一直不快不慢,因?yàn)樗麠l都是假的。


        雖然卡在 99% 的等待并不讓人愉快,但也不得不承認(rèn),沒(méi)有 0% 到 99%,我們的情緒會(huì)更焦躁,因?yàn)椴恢辣M頭在哪里。

        這就是進(jìn)度條的厲害之處 —— 讓你心甘情愿地等待。



         產(chǎn)品經(jīng)理的惡意 


        1985 年,卡內(nèi)基梅隆大學(xué)人機(jī)交互研究所教授 Brad Myers 還是一位研究生,當(dāng)時(shí)他就在論文里提出了這個(gè)觀點(diǎn)。

        只要看到進(jìn)度條,人們就會(huì)感覺(jué)好點(diǎn),它能讓人放松,讓人在等待時(shí)間去干點(diǎn)別的 —— 去花 5 分鐘發(fā)個(gè)傳真,或者干些在 1985 年的辦公室會(huì)干的事。


        雖然進(jìn)度條由程序員開(kāi)發(fā),但真正設(shè)計(jì)進(jìn)度條的人,是產(chǎn)品經(jīng)理,包括功能、樣式、圖案等。
        很多產(chǎn)品經(jīng)理在設(shè)計(jì)進(jìn)度條時(shí),會(huì)特意要求程序員制作一個(gè)“虛假進(jìn)度條”。

        可能你會(huì)問(wèn),產(chǎn)品經(jīng)理為什么無(wú)緣無(wú)故搞個(gè)假東西騙人呢?

        給你們舉個(gè)栗子,看完就懂了。

        假設(shè)現(xiàn)在有2個(gè)相同下載速度的進(jìn)度條,A和B,它們的下載完成時(shí)間都是100秒。


        A是經(jīng)過(guò)產(chǎn)品經(jīng)理特殊調(diào)教的虛假進(jìn)度條,它很套路,用了20秒下載到99%,最后1%花了80秒完成。

        B是老實(shí)進(jìn)度條,沒(méi)被調(diào)教,10秒加載到10%,100秒100%,一分不差。

        此時(shí)因?yàn)锳前十秒加載到99%,而同樣時(shí)間B卻僅有10%,在強(qiáng)烈的對(duì)比下,大部分人會(huì)認(rèn)為A比B更快,A比B更好用。

        在優(yōu)勝劣汰的規(guī)則下,用戶肯定更多會(huì)選擇A這種方式的軟件,而產(chǎn)品經(jīng)理想要留住用戶,采用這種虛假進(jìn)度條那是必須的。


        現(xiàn)在明白了吧,有時(shí)候不是進(jìn)度條不準(zhǔn),而是產(chǎn)品經(jīng)理在搞事。



         下載完成后的塊校驗(yàn) 


        根據(jù)我多年的經(jīng)驗(yàn),導(dǎo)致這種情況發(fā)生的原因主要還是因?yàn)?strong>資源塊校驗(yàn)的機(jī)制。


        迅雷下載采用P2P協(xié)議加速,P2P的優(yōu)點(diǎn)在于有多個(gè)數(shù)據(jù)來(lái)源。

        每個(gè)下載過(guò)該文件的人,相當(dāng)于一臺(tái)服務(wù)器,當(dāng)別人下載時(shí)自動(dòng)在后臺(tái)上傳數(shù)據(jù),提供速度。

        說(shuō)白了就是下的人越多,你所下載的資源能被拼湊時(shí)間越短。

        但缺點(diǎn)同樣也有,因?yàn)閿?shù)據(jù)來(lái)源多,質(zhì)量參差不齊外加上傳不穩(wěn)定,容易導(dǎo)致文件亂碼出錯(cuò)。

        因此迅雷定下了一個(gè)規(guī)則:在下載到99.9%的時(shí)候,會(huì)對(duì)文件進(jìn)行塊檢驗(yàn),如果某個(gè)塊出現(xiàn)問(wèn)題,無(wú)法重新下載,則會(huì)一直卡在當(dāng)前進(jìn)度不動(dòng)。

        下面這個(gè)圖很好的說(shuō)明了問(wèn)題

        兄弟你的形狀怎么跟我們不一樣???

        如果哪天卡在99.9%不動(dòng),別傻楞去充白金會(huì)員,大聲告訴你:鈦金會(huì)員都沒(méi)用!



        如有文章對(duì)你有幫助,

        在看”和轉(zhuǎn)發(fā)是對(duì)我最大的支持!



        推薦, Java面試手冊(cè) 
        內(nèi)容包括網(wǎng)絡(luò)協(xié)議、Java基礎(chǔ)、進(jìn)階、字符串、集合、并發(fā)、JVM、數(shù)據(jù)結(jié)構(gòu)、算法、MySQL、Redis、Mongo、Spring、SpringBoot、MyBatis、SpringCloud、Linux以及各種中間件(Dubbo、Nginx、Zookeeper、MQ、Kafka、ElasticSearch)等等...

        點(diǎn)擊文末“閱讀原文”可直達(dá)

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

        手機(jī)掃一掃分享

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

        手機(jī)掃一掃分享

        分享
        舉報(bào)
          
          

            1. 激情综合五月天丁香婷婷 | 处破初破苞一区二区三区在线播放 | 国产一级a毛一级a看高清视频 | 亚洲三级中文 | 偷拍吊钟乳熟女 |