多執行緒下載一個大檔案的速度更快的真正原因是什麼?彷徨與吶喊2020-03-12 11:19:44

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?超哥爆電商2020-03-12 11:17:33

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

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

1、延遲高的情況下

一個TCP連線要佔滿線路頻寬,需要有足夠大的TCP window,通常超過預設的TCP window上限,需要透過TCP window scale擴充套件來增加window大小。當年的作業系統對window scale的支援不太好,增加TCP連線數相當於變相增大window。

多執行緒下載一個大檔案的速度更快的真正原因是什麼?

2、作業系統的TCP

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?

3、網站限制

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?

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

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?阿斯加德兔子2020-03-12 10:30:29

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?二十二號同學2020-03-12 10:48:03

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?荒神自動化2020-03-12 10:49:52

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?五竹叔2020-03-12 11:15:10

可以把要下載的檔案看做是一桶水

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

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?

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

多執行緒下載一個大檔案的速度更快的真正原因是什麼?

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

為每個執行緒分配開始位置和結束位置。

如圖所示執行緒1分配1-3,執行緒2分配4-6,執行緒3分配7-9,每一個執行緒下載對應位置的檔案。資料下載回來後拼合起來就可以得到完整的資料了。

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

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