Networking

為什麼並發下載速度更快

  • May 1, 2020

許多下載管理器都喜歡this , thisthis支持通過多個並行連接下載文件,每個執行緒一個。這個概念是每個連接將分別下載文件的一部分。

例如,如果有 5 個連接,那麼第一個連接將下載文件的前 0-20% 部分,第二個連接將下載 20-40% 部分,依此類推。

同樣,在伺服器端,將有 5 個執行緒,其中一個執行緒將並行讀取 20% 的文件。

但是,我認為嘗試使用多個執行緒同時讀取單個文件實際上會使下載速度明顯變慢,因為機械磁碟的讀取頭將不得不比以前進行更多的尋軌。

即使我們假設磁碟控制器隊列機制足夠智能,可以在一次順序讀取中將所有 5 個多部分請求批處理到一個文件中,但與僅在一個執行緒中執行讀取然後服務於僅通過 1 個 http 連接送出文件。

那麼如何更快地並行下載文件呢?

我的理解是,僅當瓶頸是網路連接時,並行下載不同的文件部分才有用:無論是從您下載的伺服器的上傳頻寬,還是您所在伺服器之間的網路頻寬。當這些鏈路飽和時,可用頻寬將在連接之間分配,並且在某些情況下可以在連接之間平均分配。因此,如果您打開了 5 個連接,那麼您將獲得比只有一個連接更大的頻寬份額。

當然,如果伺服器和網路以更聰明的方式共享頻寬,例如,通過在客戶端 IP 之間而不是連接之間分配共享,這將不起作用。

當瓶頸是伺服器或客戶端上的磁碟 IO 時,這種策略確實無濟於事,甚至可能會損害性能,因為讀取和寫入的順序性會降低。此外,當瓶頸是您的 ISP 和調製解調器之間的可用頻寬時(我想說這可能是最常見的情況),那麼並行下載應該既無害也無幫助。

引用自:https://serverfault.com/questions/1015170