Увеличивает ли компиляция приложений из исходного кода скорость и/или объем оперативной памяти?

Аннотация:

Диапазон :Вам нужно изменить LANG в подоболочке:(LANG=C; echo "${a//[^a-zA-Z]}")

Список :Явные символы:r1=$(printf '%s' {a..z} {A..Z} {0-9})
Построить регулярное выражение по частям:r2="[$r1]"; r3="[$r1-]"; reg="^$r2($r3{0,61}$r2)?$"

Использовать последнее регулярное выражение как:if [[ ! $SUBDOMAIN =~ $reg ]]; then


Диапазоны

Сопоставление диапазона a -z или A -Z скрывает несколько сюрпризов.

Простое регулярное выражение (или глобус ), например [a-z], будут соответствовать многим другим символам:

$ a='abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
$ echo "${a//[^a-z]}"
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXY

Обратите внимание, что удален только Z. Регион может изменить это:

$ LANG=C
$ echo "${a//[^a-z]}"
abcdefghijklmnopqrstuvwxyz

Еще хуже, если используется диапазон [[:alnum:]]:

$ LANG=en_US.utf8
$ a='aáàäåbcdeéèëfAÁÀÄBßCRS§TUVWXYZ'
$ echo "${a//[^a-z]}      ${a//[[:alnum:]]}"
aáàäåbcdeéèëfAÁÀÄBßCRSTUVWXY      aáàäåbcdeéèëfAÁÀÄBßCRSTUVWXYZ

Первый диапазон удален §Z, alnumудален только §.
С LANG=C становится лучше:

$ LANG=C
$ a='aáàäåbcdeéèëfAÁÀÄBßCRS§TUVWXYZ'
$ echo "${a//[^a-z]}      ${a//[^[:alnum:]]}"
abcdef      áàäåéèëÁÀÄߧ

Диапазон, включающий Z, может работать лучше.

$ LANG=en_US.utf8
$ a='ABCDEFGHIJKLMNOPQRSTUVWXYZ[]^_`abcdefghijklmnopqrstuvwxyz'
$ echo "${a//[^a-Z]}"
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz

Но он по-прежнему будет включать многие другие символы UNICODE.

$ LANG=en_US.utf8
$ a='AÁÀÄBßCRSTUVWXYZ[]^_`aáàäåbcdeéèëf-ěžíňř'
$ echo "${a//[^a-Z]}"
AÁÀÄBßCRSTUVWXYZaáàäåbcdeéèëfěíňř

И с помощью настройки языка C просто измените проблему на:

$ LANG=C
$ a='AÁÀÄBßCRSTUVWXYZ[]^_`aáàäåbcdeéèëfxyz-ěžíňř'
$ echo "${a//[^A-z]}     ${a//[^[:alnum:]]}"
ABCRSTUVWXYZ[]^_`abcdefxyz     ABCRSTUVWXYZabcdefxyz

Подоболочка

Чтобы использовать опцию LANG=C, обычно требуется дополнительная оболочка -, чтобы избежать изменения значения LANG в работающей оболочке:

$ (LANG=C; echo "${a//[^a-zA-Z]}")
ABCRSTUVWXYZabcdefxyz

Список

Явный список символов позволит избежать как проблемы сортировки, так и необходимости изменять переменную LANG (расширения фигурных скобок используют только локаль C по умолчанию):

$ r1=$(printf '%s' {a..z} {A..Z})
$ echo "$r1"
abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ
$ a='AÁÀÄBßCRSTUVWXYZ[]^_`aáàäåbcdeéèëfxyz-ěžíňř'
$ echo "${a//[^"$r1"]}"
ABCRSTUVWXYZabcdefxyz

Для A -Z, a -z и 0 -9,использовать:

r1=$(printf '%s' {A..Z} {a..z} {0..9})

Затем создайте два необходимых значения регулярных выражений:

r2="[$r1]"
r3="[$r1-]"

И полное регулярное выражение будет:

reg="^$r2($r3{0,61}$r2)?$"

используйте его как (лучше, чтобы регулярное выражение было внутри переменной):

if [[ ! $SUBDOMAIN =~ $reg ]]; then
0
14.04.2020, 05:22
1 ответ

Да. Заметно? Больше никогда.

В зависимости от аппаратного обеспечения, на котором вы собираетесь его запускать, скорость «может» быть улучшена, потому что вы можете использовать любую оптимизацию, которую предлагает ваш ЦП. Но обратите внимание, что большую часть времени приложения просто используют библиотеки, поэтому, чтобы воспользоваться этим, вы должны, например, перейти на полную версию Gentoo.

Стоит ли оно того? Вероятно, нет, если только вы не работаете на довольно старом оборудовании, или вы не занимаетесь серьезной обработкой чисел, или чем-то, что выполняется так много раз в секунду, что каждая инструкция имеет значение.

Нынешнее оборудование в основном бездействует большую часть времени, и этот факт позволяет использовать такие вещи, как SETI@home, Folding@home, Great Mersenne Prime Search,...

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

Например, настройка Firefox на использование только одного или двух параллельных процессов контента очень помогает в системах с малым объемом памяти. Если проблема с процессором,вы можете либо отключить, либо вручную запустить определенные службы или фоновые задачи. Tumblerd может легко убить старый компьютер, и updateb тоже.

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

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

3
19.03.2021, 02:29

Теги

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