накладные расходы на вызов exec ()? - PullRequest
2 голосов
/ 04 марта 2011

У меня есть веб-скрипт, который представляет собой простую оболочку для perl-программы:

#!/bin/sh
source ~/.myinit // pull in some configurations like [PRIVATE_DIR]
exec [PRIVATE_DIR]/myprog.pl

Это действительно просто для лучшего разделения кода на части, поскольку основная программа (myprog.pl) работает по-разному.машины с различными режимами конфигурации, и это чище, чтобы не пришлось обновлять это для каждой установки.Тем не менее, я был бы готов пожертвовать чистотой ради эффективности.

Итак, вопрос в том, добавляет ли этот дополнительный вызов sh exec () какие-либо незначительные накладные расходы, учитывая, что веб-сервер может часто попадать на него (мы1000 пользователей одновременно)?Я спрашиваю, потому что я знаю, что люди приложили много усилий, чтобы встроить программы в httpd, чтобы избежать необходимости делать дополнительный вызов fork / exec.Я предположил, что это было связано с накладными расходами вызываемой программы (например, mod_perl обходит чрезвычайно медленный запуск perl), а не с процессом самого вызова.Будет ли это точно?

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

Спасибо!

Ответы [ 2 ]

0 голосов
/ 29 августа 2011

Для perl-программы легко взять некоторые envars из сценария оболочки, см. Ответ на Пусть perl выполняет сценарий оболочки и принимает env vars . При использовании этого вообще не требуется exec, что должно облегчить все ваши опасения по поводу накладных расходов exec. : -)

0 голосов
/ 08 марта 2011

Попробуйте тест?

Предполагается, что у вас есть тестовая среда, отдельная от рабочей.

(и это немного расплывчато, и реальные тестеры смогут уточнить, как это улучшить)

  • Запустите ваш текущий двухуровневый дизайн в узком цикле, используя тот же параметр для 100 000 1000000? ...

  • Затем «исправьте» ваш код так, чтобы perl вызывался напрямую, с теми же параметрами, что и выше, с циклом для одинакового количества.

  • Сбор статистики производительности для обоих прогонов. Разница между ними должна быть (примерно) стоимость дополнительного звонка.

Если это сработает, я бы оценил результаты по этому вопросу: -)

(для тега = тестирование гораздо больше сообщений, чем для тега = тест)

Надеюсь, это поможет.

P.S. поскольку вы выглядите как новый пользователь, если вы получаете ответ, который помогает вам, не забудьте пометить его как принятый или поставить + (или -) в качестве полезного ответа

...