Как работает javascript — описание принципа асинхронного исполнения

Недавно спрашивали, чем отличается асинхронное программирование от многопоточного.
Если коротко — в javascript один поток (и использует он только одно ядро), но при этом может выполняться несколько различных действий одновременно.
Это связано с тем, что javascript основан на событийной модели исполнения, и там, где остальные языки ждут ответа (от файловой системы, от базы данных, от любых внешних ресурсов), javascript лишь говорит, что нужно сделать, внешнему ресурсу, и освобождается для дальнейшей работы. Как только внешний ресурс выполнит свою работу и вернёт ответ, то js-обработчик этого ответа будет вызван (ну конечно сразу после того, как javascript virtual machine освободится от текущей работы).
Поподробней и с картинками — http://blog.carbonfive.com/2013/10/27/the-javascript-event-loop-explained/. Единственный минус статьи — поток исполнения почему-то называется message, а не workflow.

LEAVE A COMMENT