@Rouslan943

Так что такое асинхронность?

Всем привет. Могли бы объяснить мне новичку. Как синхронный однопоточный язык вообще может асинхронно выполнять задачи ? Скачивание файлов, записи - чтение, обработка данных. Как оно вообще работает ?
  • Вопрос задан
  • 209 просмотров
Решения вопроса 1
KorniloFF
@KorniloFF Куратор тега JavaScript
Работаю по font-end / JS
Так вы сами почти и ответили. Язык однопоточный, поэтому каждая операция ждет завершения предыдущей при синхронном программировании. И не ждет - при асинхронном. А чтобы определить завершение асинхронной операции были придуманы Промисы и асинки.
Это я, конечно, на пальцах. Академические ответы про асинхронность легко нагуглить.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 2
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
@dimoff66
Кратко о себе: Я есть
Как синхронный однопоточный язык вообще может асинхронно выполнять задачи ?


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

Например
function fetchMe() {
  fetch("/api/get").then(response => console.log("Сервер ответил " + response))
  console.log("Ждем ответа сервера")
}


Первая строчка асинхронная, она не выполняется сразу а ставится в очередь. Вторая строчка выполняется сразу.

То что делает fetch - просто регулярно проверяет(в порядке общей очереди событий) ответил ли сервер и когда сервер ответил - выполняется код в then. Причем поскольку js синхронный, то если перед получением ответа сервера будет какая-то затратная операция, fetch будет терпеливо ждать и ответ вы получите не тогда, когда он реально пришел, а когда выполняемая функцией fetch периодическая проверка дождется своей очереди. Это и есть асинхронность в js.
Ответ написан
Комментировать
Ваш ответ на вопрос

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

Похожие вопросы
23 нояб. 2024, в 01:31
1000 руб./за проект
23 нояб. 2024, в 00:16
2000 руб./за проект