javascript - 事件循环(Event loog)

事件循环

javascript语言的特点就是单线程,也就是在同一时间只能做一件事情,其他线程在事件队列里面等待主线程空闲,然后事件队列按照队列的顺序一次在主线程执行…

单线程

  • 因为js是客户端脚本,由于js主要的用途是处理用户的交互,所以如果是多线程,当用户又多个操作的时候,不好进行管理。
  • 单线程就意味着,所有的任务都需要排队,前一个任务执行结束,才会执行下一个任务。

同步任务和异步任务

  • 同步任务: 在主线程上执行的任务,只有当上一个任务执行完毕,下一个任务才会执行,所以如果一个任务耗时很长,下一个任务就会等待,形成阻塞
  • 异步任务:不进入主线程,而进入任务队列的任务,只有任务队列通知主线程,某个异步任务可以执行了,该任务才进入主线程执行

一般来说,有以下四种会放入异步任务队列::

  • setTimeout和setlnterval
  • Ajax异步请求
  • promise
  • dom事件

js的执行机制(主线程 + event task事件队列+ event loop事件循环)

上面你说了同步任务和异步任务,事件循环其实就是检测任务执行的一个过程
1.所有的同步任务在主线程上执行,形成一个执行栈
2.在主线程之外,还有一个任务队列,只有当异步任务又了结果,都会在任务队列中放置一个事件
3.一旦执行栈道中所有的同步任务执行完毕,也就是说主线程空闲,系统就会读取执行队列的事件,也就是执行将异步任务的结果放入执行栈
4.主线程不同重复上面的三个步骤

初到贵宝地,有钱的给个钱场,没钱的挤一挤给个钱场