Если вы разделили файл на маленькие куски, каждый сервер может начать передачу кусков, которые он получил до того, как весь файл был даже загружен. Это в основном алгоритм, который использует bittorrent, и MUCH (т. Е. Асимптотически) быстрее, чем серверы отправляют файл только после того, как он получил все это.
В самом деле, с бесконечно малым размером куска (то есть чисто теоретический случай), то время, которое требуется, чтобы распространять файл размером m
на n
серверов даже не зависит от значения n
- только на размер распространяемого файла (т.е. O (m
)). Разумеется, в практическом случае есть некоторые накладные расходы/детали, которые необходимо рассмотреть (что хорошо видно из d1val), что на практике делает его более продолжительным.
И наоборот, если у вас есть каждый сервер загрузить файл на другой сервер только после того, как он получил весь файл, то время работы составляет O (m
журнала (n
)) - асимптотический больше битторрента подхода.
Также, чтобы добавить, обычно, когда интервью задает такой вопрос, он/она спрашивает об этом алгоритме, а не о деталях реализации.
Эффективность не всегда эффективна для ЦП. Параллельно это происходит, так как пропускная способность неэффективна, так как делает это последовательно. –
Все, что я знаю, это то, что интервьюер хотел услышать что-то более продвинутое, чем отправить их параллельно ... – Ixx
Должны ли мы предполагать, что все машины связаны с центральным коммутатором/маршрутизатором и имеют равную полосу пропускания? – jweyrich