想要了解javascript的事件循环机制,首先从基础概念出发;
关于线程和进程
进程好比图中的工厂;有单独的的自己的工厂资源;
线程就是图中的工人;好多个工人协作;
官方的术语就是:进程是CPU资源分配的最小单位;线程是CPU调度的最小的单位;
javascript大家都知道是单线程;从使用部分来看的话;因为javascript起初是运行在浏览器中的脚本语言;最终操作的都是DOM元素;但是如果同时有两个进行DOM操作的时候;就需要有个先后顺序了;但是浏览器支持多线程;
浏览器内核有多个进程;
每打开一个tap浏览器就会开辟新的线程;
浏览器内核中有多个进程在同时工作;常驻进程有
GUI渲染线程;
JS引擎线程;
事件触发线程;
定时器触发线程;
HTTP请求线程;
同步任务和异步任务;
同步任务就是立即执行的任务;
异步任务:包含宏任务和微任务
栈:就像一个容器;任务就是在栈中执行;
主线程:就是操作员;负责执行栈中的任务;
任务队列:就像被等待加工的物品;
异步任务完成注册后;会将回调函数加入到任务队列中等待主线程执行;
执行栈中的同步任务执行完毕后,会查看执行任务队列中的事件函数;于是任务队列的函数结束等待状态,进入执行栈;
异步任务分为宏任务和微任务;宏任务队列可以有多个;微任务队列只有一个;
Eventloop;事件执行机制;
事件分为同步任务和异步任务;而异步任务有分为宏任务和微任务;宏任务有DOM的操作,setTimeout,setIntervor setImmediate I/O和rendering等事件;微任务包括;
Object.observe;重点关注实现了对对象的监控可以简单的实现数据的脏查询;以及实现MV*等一系类的框架实现;
先不扯那么远;[https://blog.csdn.net/hao5743/article/details/51767052];回头仔细研究这个里面的内容;区分脏查询;深入了解他们的实现机制;还有这个[https://segmentfault.com/a/1190000012787829]
回头继续说咱们的eventLoop;
当全局任务开始的时候;任务以此的如栈出栈;当遇到异步任务的时候;会调用异步模块;当栈为空的时候;回调用微任务的额队列;当微任务执行完毕的时候;会去读取宏任务排在前面的任务;执行宏任务的时候遇到微任务;会将其加入微任务队列;这样就形成了循环;