JavaScript и однопоточность

Я всегда слышу, что JavaScript является однопоточным; что при выполнении JavaScript все выполняется в одной и той же глобальной мош-яме, и все это в одном потоке.

Хотя это может быть правдой, этот единственный поток выполнения может порождать новые потоки, асинхронно запрашивая данные обратно в основной поток, верно? Например, когда отправляется XMLHttpRequest, не создает ли браузер новый поток, который выполняет транзакцию HTTP, а затем вызывает обратные вызовы в основном потоке, когда XMLHttpRequest возвращается?

А как насчет таймеров - setTimeout и setInterval? Как они работают?

Является ли эта однопоточность результатом языка? Что мешало многопоточному выполнению JavaScript до черновика нового проекта Web Workers?

5
задан user979672 1 November 2011 в 23:33
поделиться