js运行机制:Event Loop

Event Loop


前言

提示:这里可以添加本文要记录的大概内容:
例如:随着人工智能的不断发展,机器学习这门技术也越来越重要,很多人都开启了学习机器学习,本文就介绍了机器学习的基础内容。


提示:以下是本篇文章正文内容,下面案例可供参考

一、js执行为什么是单线程的?

什么是单线程呢?就是在程序执行时,所走的程序路径按照连续顺序排下来,前面的必须处理好,后面的才会执行。那js为什么是单线程的,简单粗暴的举个例子:如果js被设计了多线程,如果有一个线程要修改一个dom元素,另一个线程要删除这个dom元素,此时浏览器就会一脸茫然,不知所措。所以,为了避免复杂性,从一诞生,JavaScript就是单线程,这已经成了这门语言的核心特征,将来也不会改变

二、任务队列

1.同步任务

在主线程上排队执行的任务,只有前一个任务运行结束,后一个任务才能进行,如果前一个任务耗时很长,那么后一个任务就不得不苦逼的等待,所以,同步有时会很浪费时间

2.异步任务

任务不放在主线程是执行,而是把它放到任务队列当中。只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。异步任务执行如下:

(1)所有同步任务都在主线程上执行,形成一个执行栈。
(2)主线程之外,还存在一个"任务队列"(task queue)。只要异步任务有了运行结果,就在"任务队列"之中放置一个事件。
(3)一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
(4)主线程不断重复上面的第三步。

三、Event Loop

1.js执行的时候,首先会把同步任务放到执行栈中,把异步任务挂起,等有结果了将其放到任务队列当中(通常指的是回调函数),而不是放在执行栈中

2.当执行栈中的同步任务结束以后,此时主线程闲下来了,就会查看任务队列中是否有任务,如果有的话,将最先进入任务队列的任务加入到执行栈中执行,执行栈中的任务执行完了之后,主线程便又去任务队列中查看是否有任务可执行。

3主线程去任务队列读取任务到执行栈中去执行,这个过程是循环往复的,这便是 Event Loop,事件循环。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值