JS三座大山_单线程&EventLoop

时间:2021-02-18 13:16:56   收藏:0   阅读:0

JS三座大山_单线程&EventLoop

JavaScript是单线程、单并发、非阻塞语言

单线程:主程序只有一个线程,即同一时间片段内其只能执行单个任务。

单线程背景:浏览器执行环境中,若多线程同时对同一DOM进行操作,无法保证程序执行一致性。

引发的问题:

如何解决:

方案一:异步。

主线程可以不管IO操作,暂时挂起处于等待中的任务,先运行排在后面的任务。等到IO操作返回了结果,再回过头,把挂起的任务执行下去。于是,所有任务可以分为两种,一种是同步任务,另一种是异步任务。
ps:当主线程阻塞时,任务队列仍然能被推入任务。

方案二:web worker

非阻塞。事件驱动程序模型基本的实现原理基本上都是事件循环Event Loop.

1.JavaScript内存模型:

技术图片

2.JavaScript代码执行机制:

3.Event Loop

执行步骤:

规范:

4.JS的运行环境:浏览器 & Node

*JS是单线程执行的,而基于事件循环模型,形成了基本没有阻塞(除了alert或同步XHR等操作)的状态。

    setTimeout(function(){
        console.log(1);
     });

    new Promise(function(resolve){
        console.log(2);
        resolve();
     }).then(function(){
        console.log(3);
     });

    console.log(4);

执行结果:4 2 3 1
分析:

5.使用

评论(0
© 2014 mamicode.com 版权所有 京ICP备13008772号-2  联系我们:gaon5@hotmail.com
迷上了代码!