Который быстрее, 'найдите - должностное лицо' или 'находит | xargs-0'?

Есть класс под названием sun.misc.Unsafe , это правда. Но он не использует указатели в коде Java (поскольку в Java нет указателей, хотя я согласен с тем, что java-ссылки похожи по своей концепции), большая часть его реализована с использованием нативного кода.

Как я упоминал в комментариях, это не является частью общедоступного API и не должно использоваться клиентским кодом. Тем не менее, вы можете увидеть это на работе, когда вы посмотрите на источники классов Atomic* в в пакете java.util.concurrent.atomic .

7
задан SamB 26 January 2014 в 23:15
поделиться

2 ответа

Я ожидаю, что версия xargs будет немного быстрее, поскольку вы не создаете процесс для каждого файла. Но я был бы удивлен, если бы на практике была большая разница. Если вас беспокоит длинный список, который xargs отправляет при каждом вызове rm, вы можете использовать -l с xargs, чтобы ограничить количество используемых токенов. Однако xargs знает самую длинную длину cmdline и не выходит за ее пределы.

6
ответ дан 6 December 2019 в 07:28
поделиться

Версия xargs значительно быстрее работает с большим количеством файлов, чем версия -exec, как вы ее опубликовали, потому что rm выполняется один раз для каждого файла , который вы хотите удалить, в то время как xargs объединит как можно больше файлов в одну команду rm .

С десятками или сотнями тысяч файлов разница может составлять минуту или меньше по сравнению с большей частью часа.

Вы можете добиться того же поведения с -exec, завершив команду «+» вместо «\;». Этот параметр доступен только в новых версиях find .

Следующие два примерно эквивалентны:

find . -print0 | xargs -0 rm
find . -exec rm \{} +

Обратите внимание, что версия xargs будет работать немного быстрее ( на несколько процентов) в многопроцессорной системе, потому что часть работы можно распараллелить. Это особенно верно, если требуется много вычислений.

16
ответ дан 6 December 2019 в 07:28
поделиться
Другие вопросы по тегам:

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