-
1 # 二十二號同學
-
2 # 五竹叔
可以把要下載的檔案看做是一桶水
當使用單執行緒下載的時候就只有一個水龍頭放水,速度就會很慢。
但是如果我們多增加幾個水龍頭同時開啟,效果就不一樣了。
傳統的單執行緒現在工作流程像上圖一樣。
多執行緒下載就不一樣了,同樣的東西更多的執行緒可以極大的提高下載速度。
為每個執行緒分配開始位置和結束位置。如圖所示執行緒1分配1-3,執行緒2分配4-6,執行緒3分配7-9,每一個執行緒下載對應位置的檔案。資料下載回來後拼合起來就可以得到完整的資料了。
為了淺顯易懂這是一個最簡單的比喻。
其實真正的多執行緒下載還牽涉很多其他方面的技術問題。例如;任務分配、檔案寫入、檔案大小的獲取、斷點續傳、程式碼實現、下載狀態等等一系列的東西。
-
3 # 超哥爆電商
你好,我在做一個專案的時候,商戶也問過下載問題,我根據個人經驗來總結一下。
主要透過已下3點來闡述一下:
1、延遲高的情況下
一個TCP連線要佔滿線路頻寬,需要有足夠大的TCP window,通常超過預設的TCP window上限,需要透過TCP window scale擴充套件來增加window大小。當年的作業系統對window scale的支援不太好,增加TCP連線數相當於變相增大window。
2、作業系統的TCP
流控實現不太合理的時候,遇到丟包可能速度會掉得很快,多個連線可以緩解這個問題,至少看到速度比較平緩,不會一下掉一半。
3、網站限制
某些網站限制了單個TCP連線的速度,或者本身因為實現問題單個TCP連線就有效能上限(比如錯誤地使用了很小的buffer來做IO),多個連線也就可以增加效能。
綜合以上實際中出現的問題,總結為“多執行緒下載一個大檔案的速度更快”這句話本質上來說就是錯誤的。
如有不同觀點可以聯絡,大家一起共同探討一下!
-
4 # 彷徨與吶喊
首先,你需要先了解程序和執行緒。執行緒是作業系統操作的最小單元,程序則是作業系統執行的基本單元,一個程序可以有多個執行緒,執行緒共享程序的資源,也有自己獨立資料空間,多執行緒可以提升處理效率。多執行緒下載一個大檔案快的原理就是這個原因,單程序單執行緒相當於有一個人在處理,單程序多執行緒相當於有很多人在處理,所以處理的更快。
回覆列表
這就像,串聯和並聯的區別吧,比如一個隊伍,透過一座橋,這橋有幾個分支,然後你將隊伍按照番號級別劃分,分批次從不同的分之過橋,和只經過一個分支一點一點走要快的多吧,這個的例子就是淮海戰役的第一階段的東線。