Страницы

Поиск по вопросам

пятница, 27 декабря 2019 г.

Параллелизм и сеть

#многопоточность #сеть #распараллеливание


Допустим, есть какая-то шара на которой лежат файлы мелкого размера(например, 500кб).

Собственно, вопрос, будет ли выигрыш в производительности если их скачивать параллельно
имея широкий канал?

Или сетевая карта будет превращать все в 1 поток и параллельно качая файлы пусть
и малого размера, будет рубиться общая скорость, что не повысит производительность?
    


Ответы

Ответ 1



Вы копаете не в ту сторону. Особой разницы в производительности при скачивании в один поток или множество не будет, т.к. узким местом в настоящее время является дисковая подсистема (IO-операции). Многие крупные проекты (например, тот же Facebook или VK) используют обращение напрямую. То есть они не хранят данные в виде множества мелких файлов в системе (при этом в процессе их чтения совершается много лишних операций, которые снижают общую производительность и убивают диски при высокой нагрузке), а пишут все в один большой blob-файл и извлекают из него данные по смещению и размеру. Плюс такие динамические файлы обычно кэшируются. Что касается многопоточности при передаче файлов, то когда идет запрос на множественное скачивание - на диске идут операции чтения, которые и составляют основное время запроса. Передача данных на широком канале происходит в разы быстрее, чем их чтение с диска. Особой разницы не будет как их передавать - в один поток или множество.

Ответ 2



В 2006 MS выпустила утилиту RichCopy, которая является продолжением приложения командной строки RoboCopy. Эти утилиты предназначены для копирования и перемещения файлов в больших объемах, в том числе и по протоколу SMB. Одна из ключевых опций RichCopy - это многопоточное копирование файлов. И да, использование этой функции дает прирост в скорости копирования. При современном развитии сетей "бутылочное горлышко" сместилось от сетевой подсистемы к дисковой. Использование многопоточности позволяет "убрать" время операций открытия/чтения/закрытия файлов из общего времени копирования по сети.

Ответ 3



При скачивании в несколько потоков производительность будет выигрывать в том случае если будет мало обращений к серверу, но если к серверу будут обращаться одновременно много людей то производительность ляжет на нет(если не сам сервер).

Комментариев нет:

Отправить комментарий