netlib.narod.ru | < Назад | Оглавление | Далее > |
Перед тем, как начать создавать быстродействующий код, мы должны понять что такое быстродействие. Цель (не всегда достижимая) создания быстродействующего программного обеспечения состоит в создании программ, способных выполнять поставленные задачи настолько быстро, чтобы они реагировали мгновенно, как того хочет пользователь. Другими словами, быстродействующий код в идеале должен выполняться настолько быстро, что его дальнейшее усовершенствование становится бессмысленным.
Обратите внимание, что приведенное определение ничего не говорит о создании кода с максимально возможной скоростью. В нем также ничего не говорится об использовании языка ассемблера, оптимизирующего компилятора, да и о компиляторе вообще. Также ничего не сказано о способе разработки и написания кода. Действительно сказано только что быстродействующий код не должен заставлять пользователя ждать — и это все.
Это важно различать, поскольку многие программисты считают что язык ассемблера или правильный компилятор или конкретный язык высокого уровня или определенный подход к разработке являются ключом к созданию быстродействующего кода. Это настолько же верно, насколько выбор набора инструментов является ключом к постройке дома. Чтобы построить дом вам действительно необходимы инструменты, но достичь результата позволяют многие различные наборы инструментов. Вам также нужны чертежи, вы должны понимать как устроен дом изнутри и должны уметь пользоваться выбранными инструментами.
Аналогично, создание быстродействующего кода требует ясного понимания цели, для которой предназначена создаваемая программа, наличия общего проекта программы, алгоритмов для реализации отдельных задач, понимания того, что компьютер может делать и того что делает соответствующее программное обеспечение, и опыт программирования, предпочтительно с использованием оптимизирующего компилятора или языка ассемблера. Заметьте, что оптимизация в конце это только завершающий штрих.
![]() |
Без хорошего проекта, хороших алгоритмов, и полного понимания выполняемых программой операций, ваш тщательно оптимизированный код будет одним из наименее плодотворных созданий человечества, — быстрой медленной программой. | |
Что такое быстрая медленная программа? — спросите вы. Это хороший вопрос и короткая (правдивая) история, возможно, будет лучшим ответом.
В начале 1970-х, когда в продаже появились первые ручные калькуляторы, я знал парня по имени Ирвин. Он был хорошим студентом и планировал стать инженером. Профессия инженера в то время подразумевала умение работать с логарифмической линейкой, и в этом Ирвину не было равных. Он был настолько хорош, что бросил вызов парню с калькулятором — и выиграл, став местной легендой курса.
Хотя такое развитие навыков может прказаться похвальным, на самом деле Ирвин плевал против ветра. Через несколько коротких лет его с трудом заработанные навики стали бесполезными, и вся дисциплина была практически стерта с лица земли. Более того, любой человек, обладай он лишь половиной мозга, мог видеть грядущие изменения. Ирвин впустую потратил значительные силы и время на оптимизацию навыков, которые в скором времени стали ненужными.
Какое отношение все это имеет к программированию? Самое прямое. Когда вы тратите время на оптимизацию плохо спроектированного ассемблерного кода, или когда считаете, что оптимизирующий компилятор сделает ваш код быстрым, ваша оптимизация бесплодна, также как и усилия Ирвина. Особенно в ассемблере вы обнаружите, что без правильного общего проекта и всего остального, что необходимо для создания быстродействующих программ, вы впустую потратите значительные усилия и время, чтобы заставить изначально медленную программу работать с максимально возможной скоростью — и она все равно останется медленной — вместо того, чтобы с гораздо меньшими усилиями значительно ускорить работу программы просто немного подумав. Как мы увидим, вопросы использования языка ассемблера и оптимизирующих компиляторов в общей схеме гораздо менее значимы, чем кажется — кроме того, они практически не имеют значения вообще, если не используются в контексте хорошего проекта и полного понимания как поставленной задачи, так и работы PC.
netlib.narod.ru | < Назад | Оглавление | Далее > |