美文网首页
事件队列

事件队列

作者: jiangzj | 来源:发表于2019-05-26 16:46 被阅读0次

起因:js单线程,所有任务需要排队,但遇到耗时的操作(网络请求),就会堵塞后续的任务
解决:将耗时的操作放到异步任务队列,先执行同步的任务,等异步任务完成之后,通知主线程,再去执行

事件循环

  • 所有同步任务都在主线程上执行,形成一个执行栈
  • 主线程之外,还存在一个任务队列。只要异步任务有了运行结果,就在任务队列之中放置一个事件。
  • 一旦执行栈中的所有同步任务执行完毕,系统就会读取任务队列,看看里面有哪些事件。那些对应的异步任务,于是结束等待状态,进入执行栈,开始执行。
  • 主线程不断重复上面的第三步

MacroTask(宏任务)

script全部代码
setTimeoutsetIntervalsetImmediate
I/O、网络请求
UI Rendering

MicroTask(微任务)

Process.nextTick(Node独有)
Promise
MutationObserver

相关文章

  • task_queue事件队列的使用,模拟解包,压缩和发送过程

    完整的事件队列应该还添加一个条件变量,来监控事件队列的大小。本例的事件队列比较小,不是很完整。程序类图如下, CM...

  • iOS事件响应机制

    当发生事件后,事件会被添加到UIApplication管理的事件队列中;之后UIApplication从事件队列中...

  • iOS 事件响应和传递 总结

    事件传递: 1.首先 UIApplication 获取事件存放到事件队列中,因为事件队列是先进先出,不能放到栈内(...

  • 事件队列

    一般因为异步任务之间并不相同,因此他们的执行优先级也有区别。不同的异步任务被分为两类:微任务(micro task...

  • 事件队列

    起因:js单线程,所有任务需要排队,但遇到耗时的操作(网络请求),就会堵塞后续的任务解决:将耗时的操作放到异步任务...

  • js笔记

    Javascript 事件循环: js解析方法时,将同步任务排队到执行栈中,异步任务排队到事件队列中。 事件队列分...

  • Parser 中GCD的使用(5)

    PFEventuallyQueue 事件队列PFPinningEventuallyQueue 只是 同步线程,进行...

  • Spark Core源码精读计划#6:AsyncEventQue

    目录 前言 异步事件队列AsyncEventQueueeventQueue、eventCount属性dropped...

  • 面向对象 js 高级(单线程+事件队列)

    1.单线程+事件队列 事件队列中的任务执行的条件: 主线程已经空闲 任务满足触发条件定时函数(延时时间已经达到)事...

  • javascript事件队列

    首先,js是单线程的,js是通过事件队列(Event Loop)的方式来实现异步回调的。 进程代表CPU能处理的当...

网友评论

      本文标题:事件队列

      本文链接:https://www.haomeiwen.com/subject/hurwoqtx.html