Загрузка ЦП моей программы на C достигает 80% при перенаправлении на /dev/null

Если ваш findподдерживает действие -delete, вы обнаружите это так быстро, как только сможете, не запуская несколько процессов удаления:

find "$DIRECTORY" -name "*.$FILETYPE" -type f -mtime +"$DELETE_OLDER_THAN" \
    -delete -print >> "$REMOVAL_LOGFILE" 2>&1

Вы обнаружите, что -exec rm {} \;работает медленно, потому что создает новый процесс для каждой операции удаления. Если он есть у вашего find,-exec rm {} +будет быстрее, потому что будет создан один rmпроцесс для значительного числа файлов. Но самым быстрым из всех однопоточных -решений будет -delete.

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

0
16.07.2019, 00:45
1 ответ

Обычно это указывает на то, что ваша программа тратит значительное количество времени на ожидание обработки своего вывода. Ожидание ввода-вывода считается отдельно от использования ЦП. Перенаправляя его вывод на /dev/null, вы устраняете это, и ваша программа тратит больше времени на работу.

8
28.01.2020, 02:14

Теги

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