Почему много поток загружает быстрее, чем единственный поток?

В моем сервере существует один большой файл. Я нахожу, что много загрузка потока может получить 20 МБ, но единственный поток может получить 10 Мбит/с, кто-либо может объяснить это?

13
задан 24.03.2011, 06:45

4 ответа

Обычно это вызвано тем, что где-нибудь между Вами и другим сервером там брандмауэр, ограничивающий каждый поток HTTP 10 Мбит/с. При использовании мультипотока Вы добираетесь 2x 10 МБ (один для каждого потока).

14
ответ дан 07.12.2019, 11:32

TCP работает лучше всего, когда Вы "сохраняете канал полным" — когда передающее приложение продолжает отправлять буферы достаточно быстро для хранения стека TCP отправителя постоянно предоставляемым данными так, чтобы это могло всегда иметь данные "в полете" в сети, и когда приложение для получателя продолжает читать из стека TCP получателя достаточно быстро, который никогда не заполняет окно TCP получателя (снова, таким образом, передающий стек TCP может всегда сохранять данные "в полете" в сети).

Я мог вообразить плохо записанное однопоточное приложение отправителя, которое передает один буфер стеку TCP, ожидает, чтобы услышать, что это было полностью Acked и затем передает другой буфер. Это означает, что, после того как конец первого буфера "в полете" в сети, передающий стек TCP оголодал, чтобы данные отправили, что означает дренажи канала и не снова наполнен, пока Ack не возвращается, и передающее приложение передает его новый буфер.

Я мог также вообразить плохо записанное однопоточное приложение для получателя, которое не читает из стека TCP получения достаточно быстро и таким образом позволяет буферам стека TCP заполниться, что означает, что окно TCP заполняется, который заставляет передающий стек TCP прекращать отправлять, пока окно не открывает некоторых. Увеличение размера окна TCP получателя может помочь немногому, но действительное решение на этом конце состоит в том, чтобы считать данные быстрее.

3
ответ дан 07.12.2019, 11:32

Это происходит из-за Вашего ping между Вами и сервером и размером пакета/tcpip размер окна, используемый Вашим программным обеспечением загрузки.

В основном, если у Вас есть ping на 100 мс к серверу и пакеты запроса 100 КБ, можно только получить 10 пакетов в секунду с помощью 1 соединения, даже если интернет-скорость бесконечна.

4
ответ дан 07.12.2019, 11:32

Ну, это, вероятно, потому что можно только передать так много данных по одному соединению. Однако в многопоточной программе у Вас может быть два соединения, получающие данные одновременно и удваивающие объем информации, который можно получить. Существуют некоторые ограничения к этому, например, скорость сервера, с которого Вы загружаете... Слава два, кто бы ни записал многопоточный загрузчик, это не легко записать.

2
ответ дан 07.12.2019, 11:32

Теги

Похожие вопросы