FRONTBASE
144 subscribers
2 files
71 links
Основы веб разработки,
Подходы к самообразованию,
Неудобные личные истории.
Все вопросы: @BBankay
Download Telegram
​​Асинхронность

Вы пишите код на JavaScript...🤔
console.log("FIRST");
asyncFuncForOneSecond(callback);
console.log("THIRD");


В консоли сразу появляется вывод:
-> FIRST
-> THIRD


Через секунду вызывается наш callback:
-> some data as a result...

JavaScript однопоточный язык - one function at a time! Каждая функция всегда выполняется до конца! Почему же вызов asyncFuncForOneSecond не заблокировал JS поток и дал выполниться console.log("THIRD") 🙄 ?

JavaScript тут ни при чем. Все асихнронные функции выполняются в отдельных потоках (threads) браузера и не мешают работать JavaScript движку. Такой подход называется многозадачность или concurrency - на уровне браузера код организован так, что отдельные задачи (в потоках браузерного процесса) конкурируют за ресурсы (ЦП). Наш ЦП понемногу выполняет каждую задачу, переключаясь на следующую (очень быстро), за счет чего не простаивает дорогое процессорное время.

Promises и async functions позволяют писать асинхронные задачи в синхронном стиле. За счет этого код читаем, а за кулисами асинхронные функции выполняются в потоках браузера, результаты поставляются в callback очереди, event loop их забирает и проталкивает в stack вызовов JavaScript движка.

Посмотреть/почитать
🔸Смотреть офигенный доклад про асинхронность от Ивана Пузыревского из Яндекс.
🔹Читать бумагу про promise от Barbara Liskov и Liuba Shrira аж от июня 1988 года!

#best_video
#asynchronous_frontbase