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