2009-10-08 53 views
0

爲了好玩,我開發了一個下載管理器,我想知道如果從網絡上的套接字讀取大量數據(即80或100KB)會使下載速度更高,而不是每個循環迭代讀取4KB?從套接字讀取和下載速度

(我的平均下載速度爲200kbps的當我下載一個文件用Firefox爲例)

謝謝,尼爾塔伊布。

回答

2

答案是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閱讀或不。

+0

我知道我的傳輸速率很小,但是我怎樣才能儘可能地使用傳輸速率?閱讀功能如何影響它? 謝謝。 – user164524 2009-10-08 11:33:23

+0

@nirtayeb:您的操作系統控制着這一點。大多數操作系統沒有流量整形功能,所以您將在兩種方法上都獲得完整的傳輸速率,除非其他進程也在使用連接。 – nosklo 2009-10-08 11:57:52

+0

非常感謝:) – user164524 2009-10-08 12:03:58