2013-04-24 3 views
1

Работает над проектом, который просит загрузить около 300 фотографий из разных мест, используя wget каждые 20 минут. Я написал программу на C, которая считывает базу данных для всех идентификаторов и местоположений в массив. Для каждой записи в массиве я вызываю внешнюю команду wget для ее загрузки. Он работает, но медленный, потому что он делает один за другим.Каков наилучший способ иметь несколько дочерних процессов в C

Мое мышление заключается в использовании Multi-process, multi-thread или openMP для создания нескольких дочерних элементов. Любое предложение о том, как это сделать, ценно.

ответ

1

Множественные процессы

ошибка в одном процессе не может привести к сбою другой процесс. Это особенно полезно, если вы принимаете сторонний код (например, плагины), и это тот подход, который (в том числе) использует Google Chrome. Недостатком является то, что N процессов используют больше системных ресурсов, чем N потоков.

Многократные Нити

Использует меньше системных ресурсов, чем эквивалентное число процессов. Программирование потоков более подвержено ошибкам для многих разработчиков, и ошибка в одном потоке может влиять на другие потоки.

Лучший вариант

За то, что вы делаете, вы вряд ли увидите существенную разницу в использовании ресурсов. Используйте любую модель, которую вы можете написать быстро в высоком качестве.

1

Лично я хотел бы перейти на несколько процессов. Wget не нужно обмениваться какой-либо памятью или обмениваться данными (кроме статуса выхода, который нужен только корневому), поэтому нить не даст никакой дополнительной пользы (на мой взгляд). Подобно тому, как создание их в процессе обработки позволяет планировщику ОС наилучшим образом решать, когда запускать каждый процесс.

+0

wget - это дочерний процесс в любом случае. Это действительно сводится к тому, должен ли процесс управления, запускающий вызовы wget, быть многопоточным. –

Смежные вопросы