@Rouslan943

Асинхронность это отложенность?

Во всех туториалах рассказывают про асинхронность в контексте отложенных операций. Это действительно всего лишь отложенность? Я думал, что это паралелльное выполнение разных задач в одном потоке. Типа многозадачность.
  • Вопрос задан
  • 637 просмотров
Решения вопроса 1
freeExec
@freeExec
Участник OpenStreetMap
В общем случае да. Представь, что у тебя код
var imageFromInternet = GetImageByUrl("http://example.com/big-image.bmp");
picture.image = imageFromInternet;

Есть вариант, когда GetImageByUrl тормозит твой код, пока картинка из инета не загрузится, а это может быть и пол часа. А если тебе надо сказать 10 таких картинок - это за займёт больше суток. И всё зависло, ты даже прогресс бар не можешь нарисовать, потому, что твой код выполняется где-то внутри GetImageByUrl.

А есть вариант, когда тебе возвращают хендл операции и твой код тут же продолжается дальше. Вот она отложенность, фактически задача выполниться когда-то потом, а не сейчас. И ты получаешь возможность поставить на скачку одновременно все свои 10 картинок. А потом сидеть и ждать когда они все скачаются. И лишь затем, что-то уже с ними делать.

По сути все операции с устройствами ассинхронны внутри, иначе бы всё вставало колом пока не дождалось бы ответа.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 3
neuotq
@neuotq
Прокрастинация
Почему рассматривают прежде всего в контексте отложенных операций?
Проблема в том что по умолчанию скрипты выполняются последовательно и синхронно. Таким образом любая операция что требует времени будет останавливать всё выполнение программы. А очень часто есть ещё задачи которые в целом могут быть выполнены независимо. Для этого во многих языках/средах созданы инструменты для асинхронного выполнения части операций. Специальный механизм добавляет возможность указать что определённая операция является асинхронной и ждать её завершения не нужно, можно продолжать выполнения программы дальше. При этом с помощью других операторов мы можем указать другие операции которые будут выполняться в тот момент когда отложенная завершится.
Допустим ты делаешь и выводишь интерфейс программы со списком участников с разными сложными данными. Так вот, запрос на сами данные и список ты можешь сделать асинхронным и сразу же пользователю показать и нарисовать весь интерфейс(меню, кнопки, заголовки таблицы), а саму таблицу в тот момент пометить "Загрузка", а далее после получения данных из БД, функция ожидающая ответа нашего асинхронного запроса уже дорисует только оставшуюся часть интерфейса сами данные. Таким образом мы улучшим пользовательский опыт, тк в ином случае пользователь смотрит на пусто экран пока не получим и подготовим все данные чтобы сразу всё показать.
Ну и да, часто асинхронность позволяет ещё и удобно распараллеливать задачи, повышая в тч и общую производительность системы в целом.
Ответ написан
tundramani
@tundramani
синхронное = последовательное
асинхронное = отложенное
Ответ написан
Комментировать
@d-stream
Готовые решения - не подаю, но...
Наверное совсем по-простому: "не ждем". То есть "иди делай, по окончанию доложишь [докладывай каждые полчаса]" и дальше занимаемся своими делами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы