Re: Что тяжелее - внешний процесс или вызов библиотеки?
Oleksandr Gavenko -> debian-russian@lists.debian.org @ Tue, 04 Feb 2014 22:12:13 +0200:
>> Впрочем, это рассуждение на пальцах. Если вопрос принципиально важен -
>> замерьте, не поленитесь.
OG> Как мерить?
OG> "strace -f" - посчитать число системных вызовов?
OG> Или time?
OG> Или gettimeofday?
OG> Или http://en.wikipedia.org/wiki/Time_Stamp_Counter?
OG> Я работал с оптимизаций криптопримитивов - там использовали TSC, а как
OG> работать с более крупными исполняемыми кусками - не представляю...
OG> Мне кажется что микосекунд от gettimeofday достаточно для замеров.
OG> Как обычно - в цикле выполнить много раз и разницу во времени поделить на
OG> число итераций?
Для начала - подумать, что измеряем. Если ты работал с оптимизацией, то
ты в курсе, что прежде чем оптимизировать, надо сделать профайлинг, и НЕ
пытаться оптимизировать ничего, кроме того, что он показывает как узкое
место.
Сколько раз в секунду вызывается скрипт, про который идет речь? Если
меньше 10, то оптимизировать надо время писателя или время читателя (в
зависимости от того, одноразовый он или подразумевается его
поддерживать), а не время выполнения.
Соседнего твоего письма это в той же мере касается. Какая разница, один
раз или двадцать оно сканирует десяток простеньких файлов по десять
строк максимум в каждом, если после первого же сканирования все они
осядут в кэше, а операция производится раз в сутки, и подобных операций
в сутки десятка два максимум?
Нет, конечно, даже там было что соптимизировать - там повторяющийся код.
Но если подумать о том, что тут как раз надо оптимизировать время
читателя, то получается, что этот код - оптимальный. Даже без чтения
мана на apt-config практически сразу понятно, что он делает. Любая
попытка что-то соптимизировать даже просто по объему кода (учитывая
возможность copy-paste, даже время писателя уже особо не соптимизируешь)
приводит к коду, который читается хуже.
Можно было бы ради однопроходности обучить apt-config синтаксису вроде
apt-config shell MaxAge=APT::Archives::MaxAge,APT::Periodic::MaxAge Cache=Dir::Cache::archives/d
но тут уже читателю придется лезть в ман, чтобы понять, в каком порядке
приоритета даны варианты, из какой настройки заполнять переменную -
убывания или возрастания. В том коде понятно, это общее место
императивного программирования - последний приоритетнее.
Но вот положа руку на сердце - который из вариантов читается легче? Мне
кажется, тот, где несколько проходов по конфигам.
Reply to: