Middle
Kuidas on JavaScriptis võimalik asünkroonsus, kui JS on ühethread'iga?
sobes.tech AI
Vastus AI-lt
JavaScript однопоточный, но асинхронность достигается благодаря механизму событийного цикла (event loop) и API браузера или среды выполнения (например, Node.js).
Когда вызывается асинхронная операция (например, setTimeout, fetch, чтение файла), она передаётся в соответствующий API, который работает вне основного потока. После завершения операции результат помещается в очередь задач (callback queue).
Event loop постоянно проверяет, свободен ли основной поток, и если да — забирает из очереди следующую задачу и выполняет её. Таким образом, асинхронные операции не блокируют основной поток, а их обработка происходит по мере готовности.
Пример:
console.log('Начало');
setTimeout(() => {
console.log('Асинхронный вызов');
}, 1000);
console.log('Конец');
Вывод будет:
Начало
Конец
Асинхронный вызов
Поток не блокируется ожиданием таймера.