js事件循环

先了解以下这戏概念性的东西

1、单线程     :一个任务执行后再执行另一个任务  
 
     多线程     :同时处理多个任务
 
2、同步任务(阻塞)    :在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
 
   异步任务(非阻塞):不进入主线程、而进入"任务队列"的任务,只有"任务队列"通知主线程,某个异步任务可以执行了,该任务才会进入主线程执行。
 
 js为什么选择单线程?
    如果两个线程同时操作同一个dom肯定会发生冲突,而单线程完美的避免了这个问题。打个比方:一家公司有两个老板,a老板让员工往东,而b老板让员工往西,这时员工不知道该听哪个老板的,净剩下两个老板吵架了。而单线程就像是一个公司只有一个老板,他让往东就往东,往西就往西,不会有冲突
 
为什么要异步?
    如果单线程同步的话,像三十秒后关闭广告这种操作,这三十秒期间无法进行任何操作,因为线程一直在等待他的执行结果,等它执行完了才能继续下面的操作
 
js事件循环就是以上问题的解决方案
    
  1、所有同步任务都在主线程上执行,形成一个执行栈。
  2、主线程之外,还存在一个"任务队列"。只要异步任务有了运行结果,就在"任务队列"之中放置一个任务。
  3、一旦"执行栈"中的所有同步任务执行完毕,系统会从任务列队中,将有结果的任务放入主线程执行
  4、主线程不断重复上面的第三步。
 
白话总结:
  先把电饭锅插上就不管了,等我的菜炒完了再回来看看大米饭熟没熟
posted @ 2019-11-29 21:12  袁力超  阅读(116)  评论(0)    收藏  举报