Комментарии влияют на производительность Perl?

pytest ловит исключение SystemExit, что разумно, если подумать: если вы тестируете функцию, которая вызывает sys.exit, вы не захотите, чтобы это завершило весь ваш набор тестов. [ 114]

Используйте pytest.exit вместо sys.exit, что сигнализирует о том, что вы хотите действительно завершить тестовый набор.

7
задан brian d foy 6 November 2008 в 23:22
поделиться

9 ответов

Perl является своевременным скомпилированным языком, таким образом, комментарии и POD не имеют никакого эффекта на производительность во время выполнения.

Комментарии и POD имеют крохотный эффект на время компиляции, но они так легки и быстры, чтобы Perl проанализировал, почти невозможно измерить хит производительности. Вы видите это для себя при помощи -c отметьте, чтобы просто скомпилировать.

На моем MacBook программа Perl с 2 операторами и 1 000 строк 70 символьных комментариев занимает то же время для компиляции как один с 1 000 строк пустых комментариев как один со всего 2 операторами печати. Обязательно выполните каждый сравнительный тест дважды, чтобы позволить Вашей ОС кэшировать файл, иначе чего Вы сравниваете, время для чтения файла из диска.

Если время запуска является проблемой для Вас, это не из-за комментариев и POD.

13
ответ дан 6 December 2019 в 04:49
поделиться

Производительность во время выполнения? Нет.

Парсинг и lexing производительность?Да, конечно.

Так как Perl имеет тенденцию анализировать и закон на лету, затем комментирует, будет влиять на выполнение "запуска".

Они будут влиять на него noticably? Вряд ли.

18
ответ дан 6 December 2019 в 04:49
поделиться

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

8
ответ дан 6 December 2019 в 04:49
поделиться

Модуль Сравнительного теста бесполезен в этом случае. Это только измеряет времена для выполнения кода много раз. Так как Ваш код ничего на самом деле не делает, большая часть из него оптимизирована он далеко. Вот почему Вы видите, что он выполняет 22 миллиона раз в секунду.

Я имею почти на всей главе об этом в Освоении Perl. Ошибка измерения в методе Сравнительного теста составляет приблизительно 7%. Ваши числа сравнительного теста хорошо в этом, таким образом, нет фактически никакого различия.

2
ответ дан 6 December 2019 в 04:49
поделиться

Точка: оптимизируйте узкие места. Чтение в файле состоит из:

  • открытие файла,
  • чтение в его содержании,
  • закрытие файла,
  • парсинг содержания.

Из этих шагов чтение является самой быстрой частью безусловно (я не уверен в закрытии, это - syscall, но Вы не должны ожидать его для окончания). Даже если это - 10% из всего этого (который является, не, я думаю), то сокращение его наполовину только дает 5% улучшенную производительность, за счет пропавших без вести комментариев (который является очень плохой вещью). Для синтаксического анализатора, выбрасывая строку, которая начинается с #, не материальное замедление. И после этого, комментариев не стало, таким образом, не может быть никакого замедления.

Теперь, предположите, что Вы могли на самом деле улучшить "чтение в сценарии" часть на 5% посредством разделения всех комментариев (который является действительно оптимистической оценкой, посмотрите выше). Насколько большой доля "чтения в сценарии" в полном потреблении времени сценария? Зависит от того, сколько это делает, конечно, но так как сценарии жемчуга обычно читают по крайней мере еще один файл, это - 50% самое большее, но так как сценарии жемчуга обычно делают что-то больше, честная оценка понизит это до чего-то в диапазоне 1%. Так, ожидаемое улучшение эффективности путем разделения всех комментариев - самое большее (очень оптимистические) 2,5%, но действительно ближе к 0,05%. И затем, это, где это на самом деле дает больше чем 1%, уже быстро, так как они почти ничего не делают, таким образом, Вы снова оптимизируете в неправильной точке.

Заключение, оптимизируйте узкие места.

3
ответ дан 6 December 2019 в 04:49
поделиться

Perl не является языком сценариев в том же смысле, который сценарии оболочки. Интерпретатор не читает файл линию за линией. Осуществление программы Perl сделано на двух основных этапах: компиляция и время выполнения [1]. Во время этапа компиляции исходный код анализируется и преобразовывается в байт-код. Во время этапа времени выполнения байт-код выполняется на виртуальной машине.

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

Вы используете Benchmark.Очень хорошо! Необходимо искать способы улучшить алгоритм - не микрооптимизация. Devel:: DProf мог бы быть полезным для нахождения любых горячих точек. Вы абсолютно не должны разделять комментарии в дезинформированной попытке сделать Вашу программу быстрее. Вы просто сделаете это неудобным в сопровождении.


[1] Это обычно называют "как раз вовремя" компиляцией. Perl на самом деле имеет еще несколько этапов как INIT и END это не имеет значения здесь.

7
ответ дан 6 December 2019 в 04:49
поделиться

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

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

0
ответ дан 6 December 2019 в 04:49
поделиться

Из комментария Paul Tomblins:

Разве жемчуг не делает своего рода непрерывной компиляции? Возможно, комментарии отбрасываются рано? –

Да Perl делает.

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

1
ответ дан 6 December 2019 в 04:49
поделиться

Комментарии Perl замедляют сценарий? Ну, анализируя его, да. Выполнение его после парсинга его? Нет. Как часто сценарий анализируется? Только однажды, поэтому если у Вас есть комментарий в для цикла, комментарий отбрасывается синтаксическими анализами однажды, прежде чем сценарий даже будет работать, после того как он начал работать, комментария уже не стало (и сценарий не хранится как сценарий внутренне Perl), таким образом неважно, сколько раз для повторений цикла, комментарий не будет иметь влияния. Как быстро синтаксический анализатор может перескочить через комментарии? Путем комментарии Perl сделаны, очень быстро, таким образом я сомневаюсь, что Вы заметите. Вы заметите более высокое время запуска, если у Вас будет 5 строк кода и между каждой строкой 1 строка Mio комментариев..., но как, вероятно, то, что и того, чем использование было бы комментарий что большой быть?

0
ответ дан 6 December 2019 в 04:49
поделиться
Другие вопросы по тегам:

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