简述同步和异步,以及js的任务队列.
2024-09-01 16:18:47
javascript是单线程的一门语言,所以在执行任务的时候,所有任务必须排队,然后一个一个的执行.这就是同步模式
所以同步任务指的是,在主线程上排队执行的任务,只有前一个任务执行完毕,才能执行后一个任务;
异步任务指的是,不进入主线程、而进入"任务队列"(task queue)的任务,只有等主线程任务执行完毕,"任务队列"开始通知主线程,请求执行任务,该任务才会进入主线程执行。
所以js的运行机制是这样的:
(1): 所有同步任务都在主线程上执行,形成一个执行栈.
(2): 主线程之外,还存在一个"任务队列"(task queue)。异步任务进入任务队列等待主线程执行完毕.
(3): 一旦"执行栈"中的所有同步任务执行完毕,系统就会读取"任务队列",对应的异步任务结束等待状态,进入执行栈,开始执行。
怎么知道主线程任务为空: JS引擎中存在monitoring process进程,它会持续不断的检查主线程执行栈是否为空,一旦为空,就会去Event Queue那里检查是否有等待被调用的函数
最新文章
- C#开发微信门户及应用(33)--微信现金红包的封装及使用
- 目标跟踪_MeanShift
- 为了解决mysqlbing翻译表字段问题而分析frm文件(持续更新)
- Shader 简明入门教程
- Unlink of file '.git/objects/pack/pack-***.pack' failed. Should I try again? (y/n) (转)
- java.lang.NullPointerException 	org.apache.jsp.WEB_002dINF.pages.imagecheck.test_jsp._jspInit(test_jsp.java:22)的原因
- mingw fbx sdk /浮点数精度
- Google(谷歌)中国工程研究院 工程师 方坤 对学生朋友的一些建议
- 通过一张简单的图,让你彻底地搞懂JS的==运算
- jq里attr和prop的区别
- docker managed volume - 每天5分钟玩转 Docker 容器技术(40)
- django学习:一些疑惑
- MySQL5.7.11版本,报错Cannot proceed because system tables used by Event Scheduler were found damaged at server start
- bootstrap页面sidebar
- 1、Storm集群安装
- 在XShell中使用sz和rz命令下载和上传文件
- JAVA中的array是通过线性表还是链表实现的呢?
- Luogu P3957 跳房子
- 【Algorithm】快速排序
- Python 列表表达式 ,迭代器(2) Yield