為什麼steam下載速度會逐漸變慢?
兩年來始終被這個問題困擾。剛開始下載時,速度一直是滿的,達到寬頻的最大下行,但過了幾分鐘到幾小時不等的時間,速度會開始下跌至一個很慢的值,最後跌到0,此時修改下載區或者重啟steam會暫時恢復滿速。就這樣一直循環。我先後用過2台不同的電腦,3個不同地區的電信寬頻,3種系統,均有這種問題。曾經試過dota2大法,但現在又不管用了。
我很想知道這個現象背後的具體原理是什麼
@破曉 沒有馬上歸零可能只是個視覺效果吧, 多線程直接斷開TCP連接然後記下位置是可以的, 用不了多少時間, 除非他在buffer填滿之後才斷開連接, 不過並不是使用了多線程的充分條件. 反而建立連接更花時間. 多線程/斷點續傳的原理就是在Http請求的Header加個Range, 這樣伺服器就會在Content給你想要的部分.
Steam的下載當然是多線程的, 單線程的下載工具幾乎見不到了.
在不考慮網路的情況下, 最耗時是合併操作, 在每個線程的任務完成之後, 會合併文件, 然後再在剩下的部分分塊, 分線程. 當然, 大多數的軟體是最後才來合併, 比如IDM.
為什麼要合併? 因為每個線程下載的內容會先寫到一個位元組數組(buffer), buffer滿了之後, 就追寫到一個臨時文件(很多下載器會建立類似part.1之類的文件就是), 總不能放到內存占著. 然後會把一堆臨時文件一個一個地讀取, 並寫入到新的文件(目標文件), 即是你最終得到的文件. 在電腦配置相同時, 越大的下載任務, 所需要的時間自然越長.
steam的合併耗時並不是問題, 因為他們用了不同的機制, 最耗時的還是網路, 推斷題主遇到的問題的主要原因, 就是網路原因, 每當一個線程下載完成時, 或者網路不穩定意外斷開線程時(多線程下載很常見), 就會與伺服器建立請求, 首先是請求負責分配的伺服器, 然後分配到具體的節點後再次請求(當然還要經過一路上的各種伺服器), 如果你不幸分到了慢的節點, 連接伺服器的速度就會更慢, 連接耗時是一個原因.
至於暫停之後變快, 可能是因為統一重新分配了更快下載節點, 也可能是因為突發速率的緣故(一般提供商設置一個遠大於帶寬的突發速率值, 以提高用戶瀏覽體驗)
Steam官方說他們全面使用http協議, 下載區塊以1MB為單位, 並且每下載完一個塊就解壓縮, 因此排除p2p方式(例如bt)的可能.香港節點,牛的一批。我之前用大陸任何節點都一樣,開始全速,然後慢慢變慢,最後在這停頓。用了n個通宵實驗國內節點,結果得出HK節點一直全速。
同樣遇到這個問題,時好時壞,感覺要麼是伺服器問題,要麼是軟體設計的問題,應該跟磁碟IO沒有關係,我經常速度變成0之後過一段時間它就自動停下來了,台式機的硬碟不至於慢成這樣,而且我做其他事情都正常,不像是磁碟很忙的樣子。
更新,大家去看 @voidvoid的答案吧,更好更科學,比我不知道高到哪裡去了====================================我思索了一下,可能這和steam的下載機制有問題,當然我也不是steam的設計者,所以以下純屬觀察之後的猜想。1.steam在下載之初會檢查磁碟可用空間,創建足夠大的空文件,以便之後的寫入。
2.steam的下載界面擁有磁碟讀寫、網路速度兩條線;且點擊暫停後,下載速度不會立刻歸零,而是有一個比較長的緩衝;我認為這表明steam的下載模塊是多線程的。
所以我以我對下載庫淺薄的認識,暫時這樣理解「下載速度變慢,且重啟後恢復正常」這一事實的:1.由於長時間的下載,磁碟IO讀寫負荷增大,不能及時釋放,導致線程之間由於同步問題彼此拖了後腿,更加惡性循環,因此讀寫速度變慢,無論是下載、安裝都被迫停滯不前。2.點擊暫停後,所有線程記錄下當前的文件位置後,會釋放掉手頭的資源,這時再開始下載,當然就會一馬平川,爽到飛起。再次聲明僅為猜測。是cdn的鍋。伺服器在大負載時帶寬調度演算法有問題。
反正我下載地區選的日本,10M/s,迅雷會員加速的時候也才6M/s?畢竟我忘了學校網的帶寬。。
日本下載節點拯救世界
我知道問題出在哪裡了,路由器!!!把網線直接插到電腦上,什麼問題都解決了,特地登陸回復!!!!!!!
每次都是下得好好的,滿滿的速度變低,最後直接顯示steam預定於XX時刻下載,但是隨著時間的推移,這個時間點只會不斷延後,只有強行重啟平台然後速度才正常。。然後周而復始。。。目前沒看到關於這個的真正解決辦法。樓上所述的改下載節點。。這個東西,基本上就是看臉。。畢竟大家在不同區域。。。
我最近用的新加坡,還蠻不錯的,很穩定基本在滿速狀態,我用的是廣州電信,但是我覺得有一點奇怪的是,比如我下載GTA V的時候是滿速,但是下載另外幾個遊戲的時候速度怎麼樣都上不去,切換好幾個節點都那樣,還有些遊戲下載的時候快,更新的時候慢,確實不太懂。。。
國內節點試過來遍,最後發現洛杉磯最穩定,60M電信能跑到6.1M/s
1 在人流低峰期下載
我也會遇到這種情況 仔細一看他的下降還很有規律。
下載這方面沒有研究過 知道的肯定不如大神們 我的解決方法就是限速 是多少的網速就限制個平常一樣的下載速度。
往往這樣一做 下載就穩定了 所以我大膽猜測不是線路問題 而是調包引起的降速。根據我的經驗是設計與機械硬碟衝突所致,我帶寬滿速12M/S下載就會出現減速問題,限速到5MS/S就沒有問題了,提速致7M/S每秒問題再次出現(一段時間後降為0),重新限速致5M/S速度再次穩定.
https://jingyan.baidu.com/article/d8072ac4652b18ec94cefd4e.html
試了下, 這個方法可行, 用之前, 電信50M網, 下載除了最開始的巔峰到達6MB/s以外, 開始逐漸降低, 一直到20KB/s...按這速度, 下個一二天, 現在是保持在7MB/s的速度下載
路由器離筆記本50cm,wifi下載的時候400K,網線連上7M,速度差距就是這麼。所以路由器和網線是真的有影響不要想當然覺得沒什麼關係。網線連接不WIFI穩定太多。