Использование патча Энди Лутомирски Arch Linux NVMe с другим дистрибутивом

В данном конкретном случае лучше использовать второй вариант.

Как правило, более эффективно минимизировать количество утилит в конвейере. Лучше не разветвлять (запускать) ненужные процессы (как в вашем первом примере с ненужным процессом sed).В Интернете нетрудно найти примеры жалоб на бесполезное использование cat.

В большинстве современных Unix-подобных систем* разветвление осуществляется достаточно эффективно, но это зависит от размера запускаемого процесса, например, запуск perl или python будет намного медленнее, чем sed или awk.

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

Конкретные вопросы

Почему я должен запускать один из них?

Если вы лучше знакомы с синтаксисом одного над другим, это может быть лучше для читаемости кода (и ремонтопригодности) использовать инструмент/язык вы наиболее знакомы с.

Должен ли я использовать другой инструмент?

В данном конкретном случае я бы так не думал. Оба awk и sed являются подходящие инструменты для такого рода работ.

Какие факторы следует учитывать?

Если вам нужно обрабатывать несколько файлов (например, в цикле), то скорость/эффективность будут важны.

Если вы время от времени обрабатываете один большой файл, удобочитаемость кода может быть важнее.

Как я могу проверить эти факторы?

Вы можете профилировать разные версии с помощью утилиты time, доступной как встроенная оболочка с Bash, но также и как отдельная исполняемая программа. Например. выполнение двух примеров команд показывает, что первый пример занял .012s длиннее второго.

$ time echo "foo\nbar\nbaz" | sed 1q | awk '{ print $0 " cats" }'
foo\nbar\nbaz cats

real    0m0.056s
user    0m0.000s
sys     0m0.045s

$ time echo "foo\nbar\nbaz" | awk 'NR == 1 { print $0 " cats" }'
foo\nbar\nbaz cats

real    0m0.044s
user    0m0.000s
sys     0m0.031s

Обратите внимание, что на профилирование тестов влияет нагрузка на систему и другие ограничивающие факторы, поэтому вам придется повторять это большое количество раз, чтобы получить истинное представление о том, какая версия быстрее другой.


*В MS Windows разветвление обходится дороже, поэтому минимизация количества запускаемых процессов имеет значение при работе в таких средах, как Cygwin.

1
10.12.2017, 17:23
1 ответ

Итак, jasonwryan в основном прокомментировал ответ, который я искал здесь. Патч применяется к ядру Linux, которое можно скомпилировать и использовать для любого дистрибутива. Он связал меня с парой замечательных статей, в том числе с тем же руководством Arch Linux по ядрам .

Когда я задал этот вопрос, у меня не было достаточно знаний о ядре, чтобы понять, как применяется этот патч, но спасибо ему за то, что он направил меня на правильный путь.

0
28.01.2020, 01:01

Теги

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