javascript是单线程的一门语言,所以在执行任务的时候,所有任务必须排队,然后一个一个的执行.这就是同步模式

  所以同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;

  异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。

所以js的运行机制是这样的:

  (1): 所有同步任务都在主线程上执行,形成一个执行栈.

  (2): 主线程之外,还存在一个"任务队列"(task queue)。异步任务进入任务队列等待主线程执行完毕.

  (3): 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",对应的异步任务结束等待状态,进入执行栈,开始执行。  

怎么知道主线程任务为空: JS引擎中存在monitoring process进程,它会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数

最新文章

  1. C#开发微信门户及应用(33)--微信现金红包的封装及使用
  2. 目标跟踪_MeanShift
  3. 为了解决mysqlbing翻译表字段问题而分析frm文件(持续更新)
  4. Shader 简明入门教程
  5. Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)
  6. java.lang.NullPointerException org.apache.jsp.WEB_002dINF.pages.imagecheck.test_jsp._jspInit(test_jsp.java:22)的原因
  7. mingw fbx sdk /浮点数精度
  8. Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议
  9. 通过一张简单的图,让你彻底地搞懂JS的==运算
  10. jq里attr和prop的区别
  11. docker managed volume - 每天5分钟玩转 Docker 容器技术(40)
  12. django学习:一些疑惑
  13. MySQL5.7.11版本,报错Cannot proceed because system tables used by Event Scheduler were found damaged at server start
  14. bootstrap页面sidebar
  15. 1、Storm集群安装
  16. 在XShell中使用sz和rz命令下载和上传文件
  17. JAVA中的array是通过线性表还是链表实现的呢?
  18. Luogu P3957 跳房子
  19. 【Algorithm】快速排序
  20. Python 列表表达式 ,迭代器(2) Yield

热门文章

  1. spring-data-redis-cache 使用及源码走读
  2. 你也可以写聊天程序 - C# Socket学习1
  3. intellj Idea git ignore文件的.idea不起作用解决
  4. Spring Boot 2.X(七):Spring Cache 使用
  5. sech和asech--双曲正割和反双曲正割函数
  6. 聊聊db和缓存一致性的5种实现方式
  7. Springboot项目的jar包目录结构
  8. java学习1-初始java程序
  9. python函数与异常处理
  10. 关于javascript闭包的最通俗易懂的理解