Ћекции.ќрг


ѕоиск:




 атегории:

јстрономи€
Ѕиологи€
√еографи€
ƒругие €зыки
»нтернет
»нформатика
»стори€
 ультура
Ћитература
Ћогика
ћатематика
ћедицина
ћеханика
ќхрана труда
ѕедагогика
ѕолитика
ѕраво
ѕсихологи€
–елиги€
–иторика
—оциологи€
—порт
—троительство
“ехнологи€
“ранспорт
‘изика
‘илософи€
‘инансы
’ими€
Ёкологи€
Ёкономика
Ёлектроника

 

 

 

 


ћикроэффективность




  наихудшим нарушени€м хорошего стил€ программировани€ отно≠с€тс€ многочисленные Ђулучшени€ программы дл€ повышени€ ее эффек≠тивностиї, которые можно найти во многих учебниках, стандартах органи≠заций и головах программистов. Ёти предложени€ не только усложн€ют чтение программы и снижают ее надежность, но и весьма слабо (если во≠обще хоть как-то) вли€ют на эффективность; отсюда и название раздела: Ђћикроэффективностьї.

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

÷ентральна€ иде€ повышени€ производительности: сначала измере≠ние и затем оптимизаци€ макроэффективности. ћожно значительно улуч≠шить производительность, не занима€сь микроэффективностью.

»гнорируйте все предложени€ по повышению эффективности, пока программа не будет правильной. ’удшее, что может быть сделано, Ц это начать беспокоитьс€ о скорости программы до того, как она станет рабо≠тать правильно. Ѕыстра€, но неправильна€ программа бесполезна; медлен≠на€, но правильна€ всегда имеет некоторую ценность, а может оказатьс€ и вполне удовлетворительной

ѕусть оптимизирует компил€тор. ћногие из наход€щихс€ в экс≠плуатации компил€торов выполн€ют значительную работу по оптимиза≠ции: сокращение индексации, вы€вление выражений типа ј**2, которые можно заменить одним умножением, вынесение посто€нных выражений из циклов, размещение часто используемых переменных на быстрых регист≠рах и др. ѕрограммисту не нужно сост€затьс€ с компил€тором; следует пи≠сать про≠граммы просто и €сно. ѕусть об оптимизации заботитс€ компил€≠тор.

Ќе жертвуйте легкостью чтени€ ради эффективности.  ак пра≠вило, предложени€ по улучшению микроэффективности свод€тс€ к сово≠купности трюков и мешают достичь легкости воспри€ти€.

Ќикогда не оптимизируйте, если в этом нет необходимости. ќче≠видно, что эффективность не €вл€етс€ совсем уж несущественным вопро≠сом. ќднако программисту никогда не следует заниматьс€ оптимизацией ради самой оптимизации; он должен оптимизировать только тогда, когда эффективность важна и только когда он знает точно, кака€ именно часть программы нуждаетс€ в оптимизации.

ƒобивайтесь эффективности за счет макроэффективности. ¬ сис≠теме с виртуальной пам€тью можно значительно увеличить эффектив≠ность, располага€ модули на странице так, чтобы минимизировать число страничных прерываний и размеры рабочего множества программы. Ётот прием не требует изменений в тексте программы.   средствам повышени€ макроэффективности относ€тс€ также разумна€ организаци€ ввода-вывода, выбор оптимальных алгоритмов и структур пам€ти. Ќапример, некоторые алгоритмы сортировки и поиска в сотни раз быстрее других формально эк≠вивалентных алгоритмов. ѕрограммисту не следует заботитьс€ о микро≠эффективности, пока не будут исчерпаны все другие средства.

ƒобивайтесь эффективности на основе измерений, а не догадок. ƒоказано, что программисты крайне слабо угадывают причины неудовле≠творительной эффективности программ. Ёто не результат каких-то недос≠татков самих программистов; из-за сложной природы программ и систем интуици€ в вопросе об Ђузкихї местах подводит почти всегда. Ћучше всего при первоначальной разработке программы игнорировать большин≠ство соображений, касающихс€ эффективности.  огда программа работает (и только в том случае, если ее эффективность неудовлетворительна), про≠граммист должен выполнить измерени€, чтобы обнаружить и исправить те самые знаменитые Ђ5 % программы, занимающие 90 % времениї. ≈сли про≠грамма была спроектирована правильно (это значит, что она легко адапти≠руема), такие изменени€ post factum должны быть несложными.

¬ сложных системах самые простые алгоритмы часто и самые бы≠стрые. ћногие современные Ё¬ћ имеют трехуровневую пам€ть: неболь≠шой быстрый буфер между ÷ѕ и основной пам€тью, сама основна€ пам€ть и виртуальна€ пам€ть, отображенна€ на устройства вторичной пам€ти. ¬ таких системах локальность ссылок, т.е. отсутствие частых ссылок в ши≠роком диапазоне адресов программы и данных, Ц ключевой фактор эффек≠тивности. Ёто значит, что простые последовательные алгоритмы в таких услови€х часто работают быстрее, чем более изощренные и сложные.

 





ѕоделитьс€ с друзь€ми:


ƒата добавлени€: 2015-05-08; ћы поможем в написании ваших работ!; просмотров: 1437 | Ќарушение авторских прав


ѕоиск на сайте:

Ћучшие изречени€:

“ак просто быть добрым - нужно только представить себ€ на месте другого человека прежде, чем начать его судить. © ћарлен ƒитрих
==> читать все изречени€...

491 - | 394 -


© 2015-2023 lektsii.org -  онтакты - ѕоследнее добавление

√ен: 0.006 с.