При разработке программного обеспечения, работа над оптимизацией сводится к уменьшению потребляемых ресурсов.
Физические ресурсы: процессорное время, время чтения и записи с постоянной памяти, объём оперативной памяти.
Примечание: при оптимизации работы ПО зачастую мы можем пренебречь некоторыми параметрами, беря их за "Константу", на которую мы не можем повлиять. К примеру, при разработке для современных ПК мы можем пренебречь местом на жёстком диске, или скоростью чтения из оперативной памяти, так-как на эти характеристики мы не можем повлиять программно. С другой стороны, при написании прошивок для контроллеров, этот вопрос становиться критичным, и заставляет прибегать к дополнительным методам оптимизации.
Как-же мы можем повлиять на оптимизацию?
1. Нужно учитывать сложность алгоритмов. Чем сложнее алгоритм, и чем больший объём информации он должен обработать, тем больше процессорного времени будет задействовано.
В этом пункте иногда встречается дилемма: оптимизировать алгоритм для более быстрого выполнения, или написать более понятный код для себя любимого (или других разработчиков).
2. Скорость чтения записи. Сюда можно отнести не только работу с постоянной памятью, но и скорость передачи данных по сети. Правило простое, чем больше объём информации, тем медленнее будет работать. Но есть нюанс. Один большой файл будет читаться всегда быстрее, чем большое количество маленьких. Почему так? Дело в том, как данные хранятся в постоянной памяти. Опять-же, тема для отдельной статьи, поэтому расписывать не буду.
3. Объём оперативной памяти. Тут вообще песня. Оперативная память у нас общая для всего ПО и распределяется между процессами (а одна программа может запустить большое количество процессов) операционной системой. И более того, у нас есть ограничения, которые накладывают сами ОС на работу своего ПО. В оперативной памяти одновременно находится большое количество информации о работе системы. Зачастую ОС резервирует часть ОП под свои нужды, для того чтобы не лечь под весом работающих приложений. При этом, если места не хватает, процессы, которым нужно место, становятся в очередь, и начинаются те самые "ЗАВИСЛО *****!!!".
Правильно простое, в ОП хранить только то, что нужно здесь и сейчас.
Примечание: при работе с оперативной памятью мы всегда, явно или не явно, работаем с адресами памяти. Случай, когда память зарезервирована, но ни одно приложение не знает адреса это области и не использует, называют - утечка память. Большое количество утечек памяти приводит к тому, что память никогда не будет освобождена, и со временем вся система начнёт зависать. Это одна из причин, почему зачастую зависания системы "лечатся" перезагрузкой.
Подытоживая:
Оптимизация ПО - всегда палка о двух концах. С одной стороны, у нас исходный код, который легко читать и сопровождать. С другой стороны, скорость работы алгоритма.
С одной стороны у нас количество потребляемых ресурсов, с другой ожидание чтения/записи, очередей и т.д.