@Rouslan943

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

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

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

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

По сути все операции с устройствами ассинхронны внутри, иначе бы всё вставало колом пока не дождалось бы ответа.
Ответ написан
pro100chel
@pro100chel
Senior Pomidor Developer | CEO of GOVNOKOD LTD.
По типу отложенности.

Например, у нас есть парсер, который собирает курс 250 криптовалют. Нам нужно его собрать и перевести в рубли из долларов (то есть умножить на 80 или по скок там ща доллар) Пусть, для того чтобы спарсить курс надо зайти на каждую страницу из 250.

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

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

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