|
|||||||
АвтоАвтоматизацияАрхитектураАстрономияАудитБиологияБухгалтерияВоенное делоГенетикаГеографияГеологияГосударствоДомДругоеЖурналистика и СМИИзобретательствоИностранные языкиИнформатикаИскусствоИсторияКомпьютерыКулинарияКультураЛексикологияЛитератураЛогикаМаркетингМатематикаМашиностроениеМедицинаМенеджментМеталлы и СваркаМеханикаМузыкаНаселениеОбразованиеОхрана безопасности жизниОхрана ТрудаПедагогикаПолитикаПравоПриборостроениеПрограммированиеПроизводствоПромышленностьПсихологияРадиоРегилияСвязьСоциологияСпортСтандартизацияСтроительствоТехнологииТорговляТуризмФизикаФизиологияФилософияФинансыХимияХозяйствоЦеннообразованиеЧерчениеЭкологияЭконометрикаЭкономикаЭлектроникаЮриспунденкция |
Число генерируемых процессовКогда выполняется большое число коротких команд, то действи- тельное время выполнения может быть значительно увеличено за счет создания вспомогательных процессов. Процедурами, для которых тре- буются значительные количества таких процессов, как правило явля- ются процедуры, в которых выполняется много циклов и которые ге- нерируют командные последовательности, которые должны интерпрети- роваться другим Shell. Если вас беспокоит эффективность выполнения, вам надо знать, какие команды являются встроенными в Shell, а какие нет. Ниже приводится список всех встроенных команд: break, case, cd, continue, echo, eval, exec, exit, export, for, if, read, readonly, return, set, shift, test, times, trap, umask, until, wait, while,.,:, {} Обычные скобки () также являются встроенной командой, но ко- манда, заключенная в них, выполняется как дочерний процесс, т.е. Shell разветвляется. Все остальные команды, не указанные в спис- ке, являются внешними (требуют fork и exec). Пользователь должен всегда хотя бы приблизительно знать число процессов, генерируемых процедурой. Для всех приведенных ранее процедур число генерируемых (не обязательно одновременно) процес- сов может быть оценено по формуле: число процессов = (k*n) + c где k и с - это константы, а n может быть количеством аргументов процедуры, количеством строк во входном файле, количеством файлов в каталоге и т.п. Повышение эффективности обычно достигается за счет уменьшения константы k. В качестве примера проанализируем процедуру с именем split, чей текст проведен ниже: : # split trap 'rm temp$$; trap 0; exit' 0 1 2 3 15 start1=0 start2=0 b='[A-Za-z]' cat > temp$$ # read stdin into temp file # save original lengths of $1,$2 if test -s "$1" then start1=`wc -l < $1` fi if test -s "$2" then start2=`wc -l < $2` fi grep "$b" temp$$ >> $1 # lines with letters onto $1 grep -v "$b" temp$$ | grep '[0-9]' >> $2 # lines without letters onto $2 total=" `wc -l< temp$$` " end1=" `wc -l< $1` " end2=" `wc -l< $2` " lost=" `expr $total - \($end1 - $start1\)\ - \($end2 - $start2\)` " echo "$total read, $lost thrown away" Для каждой итерации в цикле имеется одна команда expr и либо команда echo или другая команда expr. Еще одна дополнительная ко- манда echo выполняется в конце процедуры. Если n - число строк на вводе, то количество процессов равно 2*n+1. Некоторые разновидности процедур не следует писать на Shell 'е. Так, например, если с каждым символом файла связан один или несколько процессов, хорошим решением будет перенос процедуры на язык Си. Shell -процедуры не следует использовать для посим- вольного сканирования или посимвольного формирования файлов. Поиск по сайту: |
Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. Студалл.Орг (0.004 сек.) |