多線程下載一個大文件的速度更快的真正原因是什麼?

巧鈴


首先,你需要先了解進程和線程。線程是操作系統操作的最小單元,進程則是操作系統運行的基本單元,一個進程可以有多個線程,線程共享進程的資源,也有自己獨立數據空間,多線程可以提升處理效率。多線程下載一個大文件快的原理就是這個原因,單進程單線程相當於有一個人在處理,單進程多線程相當於有很多人在處理,所以處理的更快。


Java學習愛好者


你好,我在做一個項目的時候,商戶也問過下載問題,我根據個人經驗來總結一下。

主要通過已下3點來闡述一下:

1、延遲高的情況下

一個TCP連接要佔滿線路帶寬,需要有足夠大的TCP window,通常超過默認的TCP window上限,需要通過TCP window scale擴展來增加window大小。當年的操作系統對window scale的支持不太好,增加TCP連接數相當於變相增大window。

2、操作系統的TCP

流控實現不太合理的時候,遇到丟包可能速度會掉得很快,多個連接可以緩解這個問題,至少看到速度比較平緩,不會一下掉一半。

3、網站限制

某些網站限制了單個TCP連接的速度,或者本身因為實現問題單個TCP連接就有性能上限(比如錯誤地使用了很小的buffer來做IO),多個連接也就可以增加性能。

綜合以上實際中出現的問題,總結為“多線程下載一個大文件的速度更快”這句話本質上來說就是錯誤的。

如有不同觀點可以聯繫,大家一起共同探討一下!


超哥爆電商


可以把要下載的文件看做是一桶水

當使用單線程下載的時候就只有一個水龍頭放水,速度就會很慢。

但是如果我們多增加幾個水龍頭同時打開,效果就不一樣了。

傳統的單線程現在工作流程像上圖一樣。

多線程下載就不一樣了,同樣的東西更多的線程可以極大的提高下載速度。

為每個線程分配開始位置和結束位置。

如圖所示線程1分配1-3,線程2分配4-6,線程3分配7-9,每一個線程下載對應位置的文件。數據下載回來後拼合起來就可以得到完整的數據了。

為了淺顯易懂這是一個最簡單的比喻。

其實真正的多線程下載還牽涉很多其他方面的技術問題。例如;任務分配、文件寫入、文件大小的獲取、斷點續傳、代碼實現、下載狀態等等一系列的東西。


五竹叔


線程可以理解為下載的通道,一個線程就是一個文件的下載通道,多線程也就是同時開起好幾個下載通道.當服務器提供下載服務時,使用下載者是共享帶寬的,在優先級相同的情況下,總服務器會對總下載線程進行平均分配。不難理解,如果你線程多的話,那下載的越快。現流行的下載軟件都支持多線程。

注意:實現多線程的條件是服務器支持單一IP多線程下載,如果不支持的話,很有可能封IP或者是隻有一個線程能連接成功,多餘線程被屏蔽。部分軟件提供"用代理下載"方式,這種方式不會封IP。


sshxh001


這就像,串聯和並聯的區別吧,比如一個隊伍,通過一座橋,這橋有幾個分支,然後你將隊伍按照番號級別劃分,分批次從不同的分之過橋,和只經過一個分支一點一點走要快的多吧,這個的例子就是淮海戰役的第一階段的東線。


二十二號同學


一條馬路十輛車要排隊很慢,十條馬路十輛車很快,不需要排隊


丙戌年


你可以簡單理解為單線程下載是一個人搬運10噸貨物,多線程下載是10個人搬運10噸貨物


分享到:


相關文章: