Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
книги хакеры / Питер_Гудлиф_Ремесло_программиста_Практика_написания_хорошего_кода.pdf
Скачиваний:
16
Добавлен:
19.04.2024
Размер:
9.23 Mб
Скачать

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

 

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

w Click

 

 

 

Доводыm

против оптимизации

 

 

 

 

w

 

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

.

 

 

 

 

 

.c

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-xcha

 

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

271Click

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Это далеко не полный список проблем, но он дает представление о том, на что нужно обращать внимание при написании оптимального кода.

Доводы против оптимизации

В прежние времена оптимизация имела огромное значение, поскольку первые компьютеры работали крайне медленно. Чтобы заставить про% грамму выполниться в течение разумного промежутка времени, требо% вались высокое мастерство и тонкая шлифовка отдельных машинных команд. Сейчас такое мастерство утратило былую ценность; револю% ция, осуществленная персональными компьютерами, изменила харак% тер разработки программ. Часто мы располагаем избытком вычисли% тельной мощи – в полную противоположность минувшим временам. Может сложиться впечатление, что оптимизация больше не нужна.

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

За скорость всегда приходится платить. Оптимизация кода – это вы% бор одного желательного качества в ущерб другому. В каком%то отно% шении код неизбежно пострадает. При правильном выборе улучшает% ся то качество, которое признано более ценным. Приведу основные причины, по которым следует избегать оптимизации кода:

Потеря легкости чтения кода

Очень редко оптимизированный код читается так же легко, как его более медленный аналог. По самой своей сути оптимизированная версия не является простой и непосредственной реализацией логи% ки. Ради производительности вы жертвуете легкостью чтения и ак% куратностью конструкции кода. Чем сильнее «оптимизирован» код, тем он уродливее и труднее для понимания.

Рост сложности

Более изобретательная реализация, в которой могут применяться особые тайные средства (увеличивающие взаимозависимость моду% лей) или специфичные для платформы методы, увеличивает слож% ность. Сложность – враг хорошего кода.

Сложность сопровождения/расширения

Вследствие возросшей сложности и трудности чтения сопровожде% ние кода затрудняется. Если алгоритм неясен, ошибки в коде труд% нее обнаруживаются. Оптимизация – верный способ добавить новые ошибки, которые будет трудно обнаружить в силу того, что код ста% новится менее ясным и прослеживаемым. Оптимизация ведет к по% явлению опасного кода.

 

 

 

 

hang

e

 

 

 

 

 

 

C

 

E

 

 

 

X

 

 

 

 

 

-

 

 

 

 

 

d

 

F

 

 

 

 

 

 

t

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

to

 

 

 

 

w Click

 

 

 

272m

 

 

 

 

w

 

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

.

 

 

 

 

 

.c

 

 

p

 

 

 

 

g

 

 

 

 

df

 

 

n

e

 

 

 

 

-xcha

 

 

 

 

 

 

 

hang

e

 

 

 

 

 

 

 

C

 

E

 

 

 

 

X

 

 

 

 

 

 

-

 

 

 

 

 

d

 

 

F

 

 

 

 

 

 

t

 

 

D

 

 

 

 

 

 

 

i

 

 

 

 

 

 

 

 

 

r

P

 

 

 

 

 

NOW!

o

 

 

 

 

 

 

 

 

 

 

 

 

BUY

 

 

 

 

 

 

to

 

 

 

 

 

Глава 11. Жажда скоростиClick

 

 

 

 

 

m

 

 

 

 

 

 

w

 

 

 

 

 

 

 

o

 

 

w

 

 

 

 

 

 

 

 

w

 

 

 

 

 

 

.c

 

 

.

 

 

 

 

 

 

 

 

p

 

 

 

 

g

 

 

 

 

 

df

 

 

n

e

 

 

 

 

 

-x cha

 

 

 

 

Кроме того, она становится препятствием на пути расширения ваше% го кода. Оптимизация часто основывается на дополнительных допу% щениях, ограничивая общность и возможности дальнейшего роста.

Появление конфликтов

Часто оптимизация базируется на особенностях платформы. Опре% деленные операции становятся быстрее на одной платформе, но не затрагивают другие. Выбор оптимальных типов данных для одного процессора может привести к замедлению работы на других.

Дополнительные затраты

Оптимизация – это лишний труд. Спасибо, у нас и так достаточно забот. Если код работает правильно, мы должны обратить свое вни% мание на более насущные проблемы.

Оптимизация кода отнимает много времени, и работать с подлин% ными причинами не так легко. Если вы оптимизировали не то, что требовалось, вы зря потратили свои ограниченные силы.

Поэтому оптимизация не должна занимать слишком высокое место в списке ваших забот. Сравните, что для вас важнее – оптимизация, или исправление ошибок, или добавление новых функций, или постав% ка продукта в срок. Часто оптимизация оказывается неуместной или невыгодной. Если вашей первейшей задачей становится написание эф% фективного кода, вам вообще едва ли потребуется его оптимизировать.

Альтернативы

Часто оптимизацию кода проводят, когда в ней по%настоящему нет не% обходимости. Есть ряд альтернатив, к которым можно прибегнуть, не меняя имеющегося высококачественного кода. Попробуйте следую% щие решения, прежде чем зацикливаться на оптимизации:

Нельзя ли смириться с существующим уровнем производительно% сти – действительно ли он настолько вас не удовлетворяет?

Запустите программу на более быстрой машине. Это может пока% заться слишком простым, но если вы в какой%то мере влияете на выбор платформы, на которой будет выполняться программа, эко% номически более выгодным может оказаться выбор быстрого ком% пьютера, чем трата времени на совершенствование кода. С учетом средней продолжительности реализации проекта можно быть уве% ренным, что к моменту его окончания процессоры станут заметно быстрее. А если не намного быстрее, то количество ядер ЦП на том же физическом пространстве точно удвоится.

Не все проблемы решаются повышением скорости ЦП, особенно ес% ли узким местом является не скорость выполнения, а, скажем, ско% рость обмена данными с внешней системой. Иногда быстрый ЦП мо% жет привести к значительному снижению производительности: бы%

строе выполнение может усугубить проблемы блокировки потоков.