Микро оптимизация и где её нужно применять

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Всем доброго времени суток. Наверняка все вы знаете, что такое оптимизация приложений и зачем это надо. Сегодня я хочу поговорить про микро оптимизацию, где она нужна в разработке и где её надо использовать.

В первую очередь, что такое оптимизация и в чем её отличие от микро оптимизации

Оптимизация - компоновка кода, чтобы он выполнял ту же работу, что и до оптимизации, но тратя как можно меньше ресурсов и времени.

Микро оптимизация - та же самая оптимизация, только которая практически не имеет смысла, т.е. сохраняет пользователю условно 20 наносекунд, или 1 лишнюю ячейку памяти, которые он даже не заметит.

Чем плоха микро оптимизация?

Микро оптимизация плоха тем, что на нее зачастую уходит много времени и/или интеллектуальных сил, или же приходится жертвовать чистотой кода (т.е. структурой приложения).

Где нужна микро оптимизация?

Несмотря на это, в некоторых случаях микро оптимизация нужна, как пример: метод strlen в стандартной библиотеке языка Си.

Хороший пример микро оптимизации

Рассмотрим очевидную имплементацию strlen:

size_t strlen(char* pointer)
{
    size_t i = 0;
    for (; true; i++)
    {
      if (pointer[i] == '\0') break;
    }
    return i;
}

Эта имплементация плоха тем, что она использует ячейку памяти большого размера (size_t). Это плохо потому что такой метод будет вызываться миллионы раз в секунду и в таком случае лишние условные 20 наносекунд в итерацию имеют большую разницу.

Рассмотрим реалистичную имплементацию такого метода:

size_t
strlen(const char *str)
{
	const char *s;

	for (s = str; *s; ++s)
		;
	return (s - str);
}

Этот код взят из кода библиотеки OpenBSD. Этот код использует ячейку памяти размера 8 бит (char*) вместо 16-битной (size_t), и на 1-3 инструкции меньше (поправьте, я не особо понимаю ассемблер).

Плохой пример микро оптимизации

Возьмем как пример комментарий пользователя Malfist, который оставил комментарий в документации PHP о методе is_null [оригинал]:

Микро оптимизация того не стоит.

Вам придется повторить это 10 миллионов раз, чтобы заметить разницу, чуть больше чем 2 секунды.

$a===NULL; Заняло 1.2424390316 секунд
is_null($a); Заняло 3.70693397522 секунды

Разница = 2.46449494362
Разница/10,000,000 = 0.000000246449494362

Разница между двумя методами составляет меньше чем 250 наносекунд. Оптимизируйте что-то, что имеет значение.

В таком случае микро оптимизация правда не имеет смысла. is_null делает код более читаемым, что хорошо сказывается на рабочем процессе. С другой стороны, сравнение с помощью $a === NULL займет на 250 наносекунд меньше, которые никто не заметит.

Заключение

Микро оптимизация имеет смысл только в методах, которые выполняются много раз в секунду. Как пример: 3D рендеринг, низкоуровневые библиотеки языков программирований, программы для микроконтроллеров (как пример, Arduino Atmega328).

С другой стороны, на высоких уровнях микро оптимизация не имеет смысла и впринципе нецелесообразна: очень хорош пример с методом is_null, описанный выше.

Также на мой взгляд оптимизировать БД ради пары лишних мегабайт тоже стоит отнести к категории микро оптимизации: несколько лишних мегабайт не имеют сильной разницы в такой ситуации.

Источник: https://habr.com/ru/articles/740774/


Интересные статьи

Интересные статьи

В 2018 году у себя гараже я изготовил первую интегральную схему, это был двойной дифференциальный усилитель Z1. Тогда я заканчивал школу, а сейчас уже выпускаюсь из колледжа. Очевидно, пришло время ул...
О работе в стартапах ходит огромное количество слухов. Среди них чаще встречаются: «вам не будут платить вовремя», «вы будете работать круглыми сутками», «вы должны делать то, что не вх...
Кто из нас не хотел бы учиться быстрее и с лету запоминать новую информацию? Исследователи связывают сильные когнитивные способности с множеством факторов. Они определяют не только способность к ...
11 декабря 2019 года (как раз накануне Дня Конституции) Государственная Дума Российской Федерации в третьем чтении приняла Федеральный закон «О внесении изменений в Федеральный закон «Об элек...
Задумывая технологический стартап, вы совсем не обязаны быть асом в электронике, гораздо больше шансов на хорошую идею имеет узкий специалист со знанием основ маркетинга, но, даже заказывая к...