• 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是单线程的,是指javascript运行在浏览器中是单线程的,叫做javascript引擎线程。
  • 相关阅读:
    实现一个与内容合二为一的ActionBar动画效果
    hdoj 1506&amp;&amp;1505(City Game) dp
    remine chart2安装
    zoom的学习
    海哥:T2C时代的到来了,那么什么叫T2C?
    minhash算法
    动态创建按钮的JS
    socket编程在windows和linux下的区别
    http staus汇总
    MySQL HINT:Straight_JOIN
  • 原文地址:https://www.cnblogs.com/fengch/p/8940583.html
Copyright © 2020-2023  润新知