js单线程 来自知乎

作者:云澹
链接:https://www.zhihu.com/question/31982417/answer/54136684
来源:知乎
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

JS中其实是没有线程概念的,所谓的单线程也只是相对于多线程而言。JS的设计初衷就没有考虑这些,针对JS这种不具备并行任务处理的特性,我们称之为“单线程”。

***************华丽的分割线*******************************

一段代码就能证明了啊。
function foo() {
    console.log("first");
    setTimeout(( function(){
        console.log( 'second' );
    }),5);
}
 
for (var i = 0; i < 1000000; i++) {
    foo();
}

执行结果会首先全部输出first,然后全部输出second;尽管中间的执行会超过5ms。

Javascript是单线程的

JS运行在浏览器中,是单线程的,每个window一个JS线程,既然是单线程的,在某个特定的时刻只有特定的代码能够被执行,并阻塞其它的代码。而浏览器是事件驱动的(Event driven),浏览器中很多行为是异步(Asynchronized)的,会创建事件并放入执行队列中。javascript引擎是单线程处理它的任务队列。所以当多个事件触发时,会依次放入队列,然后一个一个响应。(所以上面的代码是5ms后把输出second的任务加入队列,而当前有任务,所以只能等1000000个first输出完后才会输出second)

浏览器是多线程的

虽然JS运行在浏览器中,是单线程的,但浏览器不是单线程的。浏览器中很多异步行为都是由浏览器新开一个线程去完成。javascript引擎线程是浏览器多个线程中的一个,它本身是单线程的。浏览器还包括很多其他线程,如界面渲染线程,浏览器事件触发线程,Http请求线程等。

所以,所谓的javascript是单线程的,是指j avascript运行在浏览器中是单线程的,叫做javascript引擎线程。

转载于:https://www.cnblogs.com/fengch/p/8940568.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值