use*_*672 5 javascript multithreading
我总是听说JavaScript是单线程的; 当执行JavaScript时,它们都在同一个全局mosh坑中运行,所有这些都在一个线程中.
虽然这可能是真的,那个单一的执行线程可能会产生新的线程,异步请求数据回主线程,对吗?例如,当发送XMLHttpRequest时,浏览器是否创建了执行HTTP事务的新线程,然后在XMLHttpRequest返回时在主线程中调用回调?
那么计时器--setTimeout和setInterval呢?这些如何运作?
这种单线程是语言的结果吗?是什么阻止了JavaScript在新的Web Workers草案之前进行多线程执行?
XMLHttpRequest值得注意的是,它不会阻止当前线程.但是,任何规范中都没有概述其在运行时内的细节.它可以在单独的线程中运行,也可以在当前线程中运行,利用非阻塞I/O.
setTimeout并setInterval设置定时器,当运行到零时,将执行项(或函数/回调的代码行)添加到执行堆栈,如果代码执行已停止,则启动JavaScript引擎.换句话说,它们告诉JavaScript引擎在完成当前正在执行的任何操作之后执行某些操作.要查看此操作,请setTimeout在一个方法中设置多个并调用它.