JavaScript运行机制 消息队列 --学习篇

来源:互联网 发布:招标数据.net 编辑:程序博客网 时间:2024/06/02 03:28

看来阮大神的 js运行机制之后 写了个学习笔记 当然还有很多不理解的地方  仅供自己总结和理解


首先说javascript的运行机制 毫无疑问是单线程的  啥是单线程? 就是一个时间只能做一件事情 多了就不行  剩下的就得排队   跟排队上车似的  不能一起上两个    那为啥是单线程啊  要是一起能执行两个或多个事件  那能大大提高效率啊  

但是考虑到js是干啥的  他是客户端脚本语言啊  用途就是实现跟用户互动啊 操作DOM啥的 


比如你让他一个线程在dom上添加  一个删除这个节点 浏览器肯定蒙圈  所以  还得是单线程 


划重点  javascript就是单线程 这已经成了这门语言的核心特征  咳咳咳 


既然是单线程  那就只能排队来执行了 一个一个来了  但是比如你前一个任务时间很长很长  那后一个只能乖乖等着了 关键 你说前一个任务要是一直执行啊 计算啊 运行啊啥的  cpu一直被占用着 也行    那要是遇上ajax那种呢   就是读取数据 然后 等着返回结果  这中间的等待时间cpu肯定是闲着的  这样就耽误了下一个任务的执行


于是乎就有个这样的解决办法  啥办法? 对着这种情况的任务 主线程完全可以不管它啊  直接把这个任务挂起来 先运行排在后边的任务  等啥时候IO设备有了返回结果  在回过头 继续执行这个任务  这样 就大大提高了效率啊


于是就有了这样的一种运行机制   

任务就可以分成两种了  一种是同步任务   一种是异步任务 


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

2:异步任务指的是  不进入主线程  而是进入“任务队列”的任务 啥时候任务队列通知主线程 某个异步任务可以执行了 这样的话这个任务才会进入主线程执行


运行机制就是     所有同步任务都在主线程上执行,形成了一个执行栈;

                       主线程之外 还存在一个“任务队列”  只要异步任务有了运行结果 ,就在任务队列中放置一个事件 

                      一旦执行栈中的所有同步任务执行完毕 系统就会读取 任务队列 看看里边都有啥事件 那些对应的异步任务  于是乎结束等待状态  进入执行 栈  开始执行 

                       主线程不断执行这三部

 

只要主线程空了 就会去读取任务队列  这就是js的运行机制  



  还有就是可以设置定时任务;


0 0
原创粉丝点击