Если передача файлов не очень медленная - медленнее, чем запись данных на диск, многопоточность / многопроцессорность не помогут.Под передачей файлов я имею в виду загрузку изображений и запись их на локальный компьютер с одним жестким диском.
Использование многопоточности или многопроцессорной обработки при передаче данных с нескольких компьютеров с отдельных дисков определенно может повысить общую производительность загрузки.Просто данные, считанные с нескольких физических дисков, можно прочитать в параллельном режиме.Проблема возникает, когда вы пытаетесь сохранить эти образы на локальном диске.
У вас есть только один локальный жесткий диск (если дисковый массив не используется), один жесткий диск, как и большинство устройств HW, может выполнить только одну операцию ввода-вывода ввремя.Поэтому попытка одновременно записать несколько изображений на диск не улучшит общую производительность - она может даже помешать этому.
Представьте себе, что 40 уже загруженных образов пытаются записать на один механический жесткий диск сОдин жесткий диск направляется в разные места (разные физические файлы), особенно если диск фрагментирован.Тогда это может даже замедлить весь процесс, потому что жесткий диск тратит время на перемещение своей магнитной головки из одного положения в другое (приводы могут частично смягчить это путем изменения порядка операций ввода-вывода для ограничения перемещения головки).
С другой стороны, еслиВы выполняете некоторую предварительную обработку с этими изображениями, которые интенсивно загружают процессор, и именно тогда вы собираетесь сохранить их на диск, многопоточность может быть действительно полезной.
И на вопрос, что предпочтительнее.В современных ОС нет существенной разницы между использованием многопоточности и многопроцессорности (охватывающих несколько процессов).Операционные системы, такие как Linux или Windows, планируют потоки, а не процессы - на основе приоритетов процессов и потоковТаким образом, нет большой разницы между 40 однопоточными процессами и одним процессом, содержащим 40 потоков.Использование нескольких процессов обычно потребляет больше памяти, поскольку ОС для каждого процесса приходится выделять некоторую дополнительную память (не большую), но с точки зрения разницы в скорости между многопоточностью и многопроцессорностью не является значительным.Есть еще один важный вопрос, который следует рассмотреть, какой метод использовать (будут ли эти загрузки использовать некоторые данные - например, общий интерфейс с графическим интерфейсом - многопоточность проще в использовании), (настолько ли велики эти файлы для загрузки, что 40 передач могут исчерпать все виртуальное адресное пространствоодин процесс - использовать многопроцессорность).
Обычно:
Многопоточность - проще в использовании в одном приложении, поскольку все потоки совместно используют виртуальное адресное пространство одного процесса и могут легко взаимодействовать друг с другом.С другой стороны, один процесс имеет ограниченный размер виртуального адресного пространства (менее 4 ГБ на 32-битном компьютере).
Многопроцессорность - сложнее использовать в одном приложении (необходимость межпроцессного взаимодействия), но большемасштабируемость и надежность (если происходит сбой процесса передачи файлов), + больше виртуального адресного пространства для использования.