zoukankan      html  css  js  c++  java
  • 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引擎线程。
  • 相关阅读:
    asp.net mvc 缓存
    C#版 Socket编程(最简单的Socket通信功能)
    c# 读取嵌入式文件
    js 对象 copy 对象
    double截取小数点位数
    c#读取excel
    观察者设计模式
    xml序列化方式
    sicily Huffman coding
    sicily Fibonacci 2
  • 原文地址:https://www.cnblogs.com/fengch/p/8940583.html
Copyright © 2011-2022 走看看