Синхронность, асинхронность. В чём разница и почему это важно?
Разработчики любят использовать термины, которые для них звучат естественно, но для большинства людей, не связанных с разработкой, эти термины могут пониматься совсем иначе. Этот текст — для всех, кому приходится общаться с разработчиками и тех плохо понимает разницу между этими терминами.
Как ускорить выполнение Если хочется, чтобы программа или сайт работали быстрее, вариантов на самом деле не так много.
Можно купить более мощное железо. Можно делать меньше - сократить функциональность или упростить бизнес-логику. Можно использовать более эффективные алгоритмы. Можно выполнять задачи параллельно, задействуя несколько ядер процессора. И можно сокращать время ожидания/отклика.
Последний пункт часто недооценивают, хотя именно он даёт наибольший эффект во многих системах.
Асинхронность и ожидание Рассмотрим простой бытовой пример — стирку. Сортировка вещей перед стиркой занимает 15 минут. Сама стирка длится 40 минут. Развесить и разложить чистое — ещё около 10 минут.
Если делать всё строго последовательно, процесс выглядит так: сначала сортируем вещи, затем запускаем стирку и просто ждём, после чего разбираем чистое. В сумме получается 65 минут.
Но ключевой момент в том, что стирка не требует вашего участия. Вы можете запустить машину и заняться другими делами. Именно так асинхронность сокращает общее время. Работа не становится быстрее сама по себе, но исчезают паузы, в которые ничего не происходит.
Часть действий можно выполнять параллельно — например, вдвоем — реальное время сокращается ещё сильнее. При этом суммарное количество затраченных человеко-минут может даже увеличиться, но результат будет получен быстрее.
Здесь важно различать два понятия: есть время выполнения (сколько усилий было потрачено в сумме), и есть реальное время - сколько прошло от начала до конца.
Последовательное, конкурентное и параллельное Последовательная модель выполняет задачи строго шаг за шагом. Параллельная — действительно выполняет их одновременно. Между ними есть ещё одна модель — конкурентная, или чередующаяся.
Представим задачу, сильно нагружающую процессор, например распаковку большого архива. Если бы система работала строго последовательно, на время распаковки она бы полностью «зависла»: нельзя было бы открыть браузер или даже передвинуть курсор.
На практике этого не происходит. Система периодически приостанавливает распаковку, чтобы дать процессорное время другим задачам обработке ввода, интерфейсу. Затем возвращается к распаковке. Задачи не выполняются одновременно, но они чередуются и система остаётся отзывчивой.
Исходящие запросы Представим веб-краулер - программу, которая обходит сайты. Она загружает страницу, извлекает контент, затем повторяет это для каждой ссылки.
Основная проблема не в вычислениях, а ожидание сети. Каждая страница может загружаться доли секунды, но при большом количестве страниц эти задержки накапливаются в часы. Процессор при этом простаивает.
Асинхронный вариант выглядит иначе. Пока идёт ожидание ответа от сети, система может выполнять другие задачи. Это требует дополнительных усилий при разработке, но даёт серьёзный прирост производительности.
Входящие запросы Теперь посмотрим на ситуацию со стороны сервера. Пользователь отправляет запрос, сервер собирает данные - из базы, из внешних сервисов и возвращает ответ. Каждый такой шаг занимает время, и пользователей обычно много.Самая простая модель — обрабатывать запросы строго по очереди. Но если первый запрос выполняется несколько секунд, остальные будут просто ждать.
Обычно проблему пытаются решить запуском нескольких потоков или процессов. Но их количество ограничено, и при большом числе одновременных запросов система не масштабируема.
Сервер чаще всего не упирается в процессор. Он ждёт данные - от базы данных или других сервисов и в это время ничего не делает. Асинхронная модель позволяет задаче, которая ждёт ответа, временно уступить выполнение другим задачам. В итоге сервер может обрабатывать больше одновременных запросов, сокращая время ожидания для пользователей.
· 30.01
Вот только пример со стиральной машиной напрямую показывает, что он плох: - включаем машинку - обнаруживаем, что белье не отсортировано, в машинку нечего положить - начинаем развешивать белье, а оно еще не постирано
Зовем помощника - помощник сортирует белье - ты не можешь включить стиралку - ты не можешь ничего развесить
Начинаешь помогать помощнику, чтобы «ускорить» - он выбирает только светлые вещи - ты выбираешь только темные вещи - вы все так же не можете запустить первый цикл стиралки
Разбиваете на части - запускаете стиралку с 2 шмотками - развешивать ничего не можете, сортируете - после окончания стирки надо запускать стирку еще раз
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
коммент удалён
· 31.01
А при загрузке становится ясно что это и не стиральная машина вовсе 😂
0
ответить
коммент скрыт — часть юзеров считает его токсичным или некорректным
ответ удалён