Один достойный человек вчера спросил меня:
- У меня огромный массив. Будет ли быстрее разбить его на куски для обработки, чтобы сэкономить память?
С той поры, когда Билл Гейтс произнес свою знаменитую фразу "640 килобайт хватит всем", доступный объем памяти все время растет, но остается конечной величиной. Например, мой домашний компьютер имеет 128Гб памяти, то есть ровно в хрен-знает-сколько-лион раз больше, но браузер Google Chrome легко поглощает весь этот объем.
Беречь ограниченные ресурсы - хорошо и правильно. Но все зависит от контекста. Один процесс легко может занять, скажем, 4Гб памяти. Скажут ли нам спасибо остальные 124Гб, за то, что мы избавили их от работы? Будут ли они наслаждаться жизнью, нежась в кремниевых лежаках на берегу моря электронов?
Мне пока ни разу не говорили. Аналогия с мотором автомобиля (он лучше всего работает в определенном диапазоне оборотов) - ложная: модули памяти не изнашиваются от перезаписи. Кожаные мешки могут расслабиться: электронные мозги гораздо выносливее их унылого серого вещества.
В то же время, мне совершенно точно известно: запустив 50 процессов по 4Гб, я загоню компьютер в своп, а если его не хватит, OOM killer разберется кто виноват и накажет кого попало. Начнет убивать процессы, и тогда "те из вас, кто останется в живых, будут завидовать мертвым".
Надо ли заниматься оптимизацией в этот момент? Тоже неясно! Сначала надо взять профайлер и посмотреть, что будет дешевле: переписать логику (например, на генераторы) или докупить еще планку памяти.
Может оказаться так, что мы легко сокращаем потребление памяти в 10 раз, просто возвращая генератор вместо массива. А иногда приходится биться несколько недель ради экономии в 10%.
И это время:
а) стоит денег,
б) никогда не вернется в вашу жизнь.
Оптимизируйте, прежде всего, своё свободное время. Человек изнашивается гораздо быстрее железяки.
#оптимизация #программирование