漫話:為什么你下載小電影的時(shí)候進(jìn)度總是卡在99%就不動(dòng)了?
進(jìn)度條
其實(shí),早在計(jì)算機(jī)發(fā)明之前,就已經(jīng)有了進(jìn)度條的概念。1896 年,波蘭經(jīng)濟(jì)學(xué)家 Karol Adamiecki發(fā)明了一種叫做harmonogram(波蘭語(yǔ),時(shí)間表)的圖表;同一時(shí)間,亨利·甘特(Henry Gantt)提出類似的方法并在西方普及。Adamiecki的圖表就被叫做為甘特圖。
后來(lái),計(jì)算機(jī)出現(xiàn),甘特圖這個(gè)概念后來(lái)被用于計(jì)算領(lǐng)域。主要用來(lái)計(jì)算機(jī)在處理任務(wù)時(shí),實(shí)時(shí)的,以圖片形式顯示處理任務(wù)的速度,完成度,剩余未完成任務(wù)量的大小,和可能需要處理時(shí)間等,一般以長(zhǎng)方形條狀顯示。
人類史上的第一個(gè)在計(jì)算機(jī)中進(jìn)度條,出現(xiàn)在 Mitchell Model 1979 年的博士論文。Model 使用進(jìn)度條來(lái)表達(dá)電腦執(zhí)行任務(wù)的進(jìn)度,這也是我們現(xiàn)在??吹降倪M(jìn)度條。
計(jì)算機(jī)領(lǐng)域中引入進(jìn)度條,主要是通過(guò)圖形化的形式告知用戶計(jì)算機(jī)正在努力工作中,試想下,如果沒有進(jìn)度條,那么用戶就無(wú)法知道程序是處理中,還是失去了響應(yīng)。也無(wú)法知道程序處理的大概進(jìn)展。
所以,進(jìn)度條更多的是為了滿足用戶心理,緩解用戶焦慮而設(shè)計(jì)。
但是,計(jì)算機(jī)中顯示的進(jìn)度條其實(shí)并不是真正的進(jìn)度,而是預(yù)估出來(lái)的。通常的計(jì)算方式是:
操作數(shù)量/總操作數(shù)量=進(jìn)度條百分比
比如我們進(jìn)行文件拷貝,當(dāng)文件總大小事100M的時(shí)候,計(jì)算機(jī)可以根據(jù)已經(jīng)拷貝的文件大小和時(shí)間,預(yù)估出文件全部拷貝完需要的總時(shí)長(zhǎng),然后就可以根據(jù)已用時(shí)長(zhǎng)和總時(shí)長(zhǎng)的對(duì)比,計(jì)算出進(jìn)度了。
99%的時(shí)候在干什么?
我們?cè)凇度绾谓o女朋友解釋什么是P2P?》中其實(shí)介紹過(guò),現(xiàn)在的下載軟件都是采用P2P技術(shù)進(jìn)行文件下載的。
在P2P模式下,當(dāng)我們想要下載一個(gè)電影的時(shí)候,并不是從一個(gè)資源處串行下載的。而是會(huì)從多個(gè)P2P節(jié)點(diǎn)上分別多線程的進(jìn)行下載,然后再把下載后的資源整合到一起。
這個(gè)過(guò)程就像我們組裝電腦一樣,我們同時(shí)從不同的店鋪購(gòu)買不同的電腦配件,然后自己組裝電腦。
但是,我們知道 ,由于受到發(fā)貨地、發(fā)貨時(shí)間、物流等影響,所有配件的到達(dá)時(shí)間肯定不是一樣的。有一些會(huì)先到達(dá),有一些會(huì)后到達(dá)。
所以,如果有一些配件先到達(dá)的時(shí)候,我們就需要繼續(xù)等到后到達(dá)的配件。
如果我們組裝一個(gè)電腦需要100個(gè)配件,其中99個(gè)已經(jīng)到達(dá)了,但是最后一個(gè)由于庫(kù)存原因還未發(fā)貨,那么,整體電腦組裝的進(jìn)度應(yīng)該就是99%,并且這個(gè)99%的狀態(tài)還會(huì)維持很長(zhǎng)一段時(shí)間。
所以,因?yàn)椴捎肞2P的下載方式,文件從多個(gè)節(jié)點(diǎn)下載,由于從各個(gè)節(jié)點(diǎn)下載的速度不一致,有些節(jié)點(diǎn)的資源會(huì)相較于其他資源慢一些,就會(huì)出現(xiàn)進(jìn)度卡在99%的情況。
另外,除了以上這種原因以外,還有一種情況。
那就是我們已經(jīng)收到了所有的電腦配件,開始組裝的時(shí)候,發(fā)現(xiàn)其中有一個(gè)配件出現(xiàn)了問(wèn)題,運(yùn)輸過(guò)程中有損壞,這時(shí)候我們就需要聯(lián)系商家進(jìn)行換貨。這個(gè)過(guò)程電腦組裝的整體進(jìn)度也會(huì)卡在99%。
所以,因?yàn)橘Y源進(jìn)行分塊下載,在下載的最后階段,就需要進(jìn)行組合及校驗(yàn),而在校驗(yàn)時(shí)發(fā)現(xiàn)某塊出現(xiàn)問(wèn)題,就需要重新下載。這個(gè)過(guò)程進(jìn)度也會(huì)一直卡在99%。
關(guān)于作者:漫話編程,是一個(gè)通過(guò)漫畫+音頻的形式講解枯燥的編程知識(shí)的公眾號(hào)。致力于讓編程變得更有樂(lè)趣。