js的任务队列的一些见解

任务队列又称消息队列

函数分二种
1、一种是同步函数,一个接一个的执行
2、一种异步函数,调用者不会立即拿到预期的结果,而是通过一定的手段才能拿到,那这个歌函数就是异步的
任务也分二种
1.同步任务
一个任务执行完,之后才能执行下一个任务
例如console.log() for循环等 promise里的console.log()
2.异步任务
主线程发出一个异步请求,对应的工作线程(例如浏览器事件触发线程,异步http请求),接受请求并告知主线程已收到,主线程继续执行后面的代码,同时工作线程执行异步任务,工作线程完成任务后,将完成信息放到消息队列,主线程通过实践循环过程去取任务消息,然后执行一定的动作

image.png

例如promise里面的reslove ,reject,then()
settimeout setinterval

从异步过程的角度看,addEventListener 函数就是异步过程的发起函数,事件监听器函数就是异步过程的回调函数。事件触发时,表示异步任务完成,会将事件监听器函数封装成一条消息放到消息队列中,等待主线程执行。

image.png

1 setTimeout(function() {
2 console.log(1);
3 },0);
4 console.log(2);
执行结果2,1。因为只有在执行完第二行以后,主线程空了,才会去任务队列中取任务执行回调函数。
异步的代码和函数,一般会在下一次事件循环中执行

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,525评论 19 139
  • 之前对JS运行机制不太明白,直到读了阮一峰文章后,突然脑洞大开.当然中间也遇到了一点理解上的问题,我只做了一点稍微...
    码太农阅读 3,780评论 0 1
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 7,797评论 1 17
  • 弄懂js异步 讲异步之前,我们必须掌握一个基础知识-event-loop。 我们知道JavaScript的一大特点...
    DCbryant阅读 7,657评论 0 5
  • 翻译了You don't know JS:async & performance中的异步部分,原文地址:https...
    purple_force阅读 6,240评论 0 13