12

Скорость работы программ

Всем привет, работаю java разработчиком 10 лет, хотел бы в этом посте рассказать о разных взглядах на скорость работы программ. Мой опыт относится в основном к бекенду.

С технической точки зрения, программы нужны для обработки данных - получить, вычислить, сохранить и передать дальше. Часть этих данных нужна сразу - например, при запросе пользователем страницы интернет-магазина. Часть данных должна рассчитываться с задержкой - например, клиринг должен выполняться после завершения финансового дня. И есть еще ситуации, которые допускают небольшой лаг: например, пользователь скорее всего не заметит, что после совершения покупки электронный чек пришел с десятиминутной задержкой. С этой точки зрения, сервисы решают онлайн задачи и задачи с отложенным выполнением (см OLTP и OLAP для баз данных).

Для онлайн сервисов довольно важной характеристикой является длительность времени ответа. Долгая загрузка сайта создает негативный пользовательский опыт.

В то же время хотелось бы поддерживать параллельно множество пользовательских сессий. Как сервис поступает, если получает запросов в секунду больше, чем он может обработать? Либо отказывает в обслуживании, либо добавляет запрос в конец очереди, которую разбирает по мере получения ресурсов. Последнее решение увеличивает длительность формирования ответа.

Получается, что нет единого понятия скорости, а есть конкурирующие: предел потока запросов и длительность формирования ответа. Это так называемые нефункциональные требования. Длительность ответа представлена распределением, поэтому к нему может применяться агрегирующая функция, например: длительность обработки не больше 1 сек для 90% запросов.

Для формирования отчетов и аналитики используются сервисы с отложенным расчетом. Их преимущество - использование пакетных (batch) операций. Например, когда в поликлинике вы ждете перед кабинетом, а раз в полчаса медсестра забирает у всех карты чтобы поставить печать - это пакетная операция. Выгоднее сделать один запрос к базе и получить данные 100 пользователей, чем сделать 100 запросов по каждому пользователю - но размер батча ограничен (памятью, буфером). Скорость таких сервисов можно измерять как количество обработанных значений в единицу времени.

Таким образом, обсуждать скорость работы программ желательно без отрыва от контекста решаемых ими задач. Всем удачи на работе и собеседованиях

Лига программистов

2K поста11.8K подписчиков

Правила сообщества

- Будьте взаимовежливы, аргументируйте критику

- Приветствуются любые посты по тематике программирования

- Если ваш пост содержит ссылки на внешние ресурсы - он должен быть самодостаточным. Вариации на тему "далее читайте в моей телеге" будут удаляться из сообщества