Чтение из сокетов и скорость загрузки - PullRequest
0 голосов
/ 08 октября 2009

Ради интереса я разрабатываю менеджер загрузок и хотел бы знать, если чтение большого стека данных (например, 80 или 100 КБ) из сокета по сети увеличивает скорость загрузки вместо чтения 4 КБ для каждого итерация цикла?

(Моя средняя скорость загрузки составляет 200 КБ / с, когда я загружаю файл, например, с помощью Firefox)

Спасибо, Нир Тайеб.

1 Ответ

2 голосов
/ 08 октября 2009

Ответ НЕТ .

Ваша скорость передачи в сети (200 Кбит / с) указывает на то, что буферизация 4 КБ, 8 КБ или 200 КБ вряд ли будет иметь значение. Время, проведенное между чтениями, слишком мало. В любом случае, узким местом является ваша скорость передачи.

Давайте попробуем с mp3-подкастом stackoverflow 30,9 МБ :

ПРИМЕЧАНИЕ : Это ненадежный хак, на результаты которого может сильно повлиять факторов - полезно для демонстрации только для целей)

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-мегабитное соединение, размер файла, выбранный сервер, нет особой разницы, использовал я чтение по частям или нет.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...