0
爲了好玩,我開發了一個下載管理器,我想知道如果從網絡上的套接字讀取大量數據(即80或100KB)會使下載速度更高,而不是每個循環迭代讀取4KB?從套接字讀取和下載速度
(我的平均下載速度爲200kbps的當我下載一個文件用Firefox爲例)
謝謝,尼爾塔伊布。
爲了好玩,我開發了一個下載管理器,我想知道如果從網絡上的套接字讀取大量數據(即80或100KB)會使下載速度更高,而不是每個循環迭代讀取4KB?從套接字讀取和下載速度
(我的平均下載速度爲200kbps的當我下載一個文件用Firefox爲例)
謝謝,尼爾塔伊布。
答案是NO。
您的網絡傳輸速率(200kbps)表示緩衝4k或8k或200k幾乎沒有差別。讀取之間花費的時間太少。無論如何,瓶頸似乎都是你的傳輸速率。
讓我們嘗試用stackoverflow 30.9MB mp3 podcast:
有用注意:這是一個不可靠的黑客,其結果可以由多種因素很多 影響 - 僅用於演示 目的)
import urllib2
import time
def report(start, size, text):
total = time.time() - start
print "%s reading took %d seconds, transfer rate %.2f KBPS" % (
text, total, (size/1024.0)/total)
start = time.time()
url = ('http://itc.conversationsnetwork.org/audio/download/'
'ITC.SO-Episode69-2009.09.29.mp3')
f = urllib2.urlopen(url)
start = time.time()
data = f.read() # read all data in a single, blocking operation
report(start, len(data), 'All data')
f.close()
f = urllib2.urlopen(url)
start = time.time()
while True:
chunk = f.read(4096) # read a chunk
if not chunk:
break
report(start, len(data), 'Chunked')
f.close()
我的系統中的結果:
All data reading took 137 seconds, transfer rate 230.46 KBPS
Chunked reading took 137 seconds, transfer rate 230.49 KBPS
因此,對於我的系統,2兆位連接,文件大小,服務器選擇,這是沒有太大的區別,如果我使用chunked閱讀或不。
我知道我的傳輸速率很小,但是我怎樣才能儘可能地使用傳輸速率?閱讀功能如何影響它? 謝謝。 – user164524 2009-10-08 11:33:23
@nirtayeb:您的操作系統控制着這一點。大多數操作系統沒有流量整形功能,所以您將在兩種方法上都獲得完整的傳輸速率,除非其他進程也在使用連接。 – nosklo 2009-10-08 11:57:52
非常感謝:) – user164524 2009-10-08 12:03:58