链接

链接

node 浏览器 执行顺序有差异

macrotask microtask

一个线程会有 堆 栈 消息队列;  栈函数执行是用的, 堆用了存放定义的对象, 消息队列来处理异步的操作

a()

setTimeout( b, 0);

setImeout( c, 0 );

console.log(2);

这里会形成一个主线程, 一个消息队列, 队列包含b这个函数, 要等主线程 a  console.log(2) 执行完才会去执行消息队列b

执行a 和 console.log(2) 形成栈, 执行完后, 栈清空,

然后再去消息队列拿一个消息b, 如果b调用了其他函数, 会生成两个栈 ,    执行完b后,  在执行c,

这样循环就形成了 eventLoop

主线程就是js引擎, 消息队列一般是浏览器提供的,  js引擎发现有异步 或者 事件先放在消息队列中,

如果浏览器中的队列已经完成(比如ajax有结果后, 或者定时器到了20s后 ), 就会通知js引擎去处理这个结果, 或者 回调函数

理解 EventLoop的更多相关文章

  1. 我是这样理解EventLoop的

    我是这样理解EventLoop的 一.前言   众所周知,在使用javascript时,经常需要考虑程序中存在异步的情况,如果对异步考虑不周,很容易在开发中出现技术错误和业务错误.作为一名合格的jav ...

  2. 【前端知识体系-NodeJS相关】对于EventLoop(事件轮询)机制你到底了解多少?

    EventLoop 1. EventLoop的执行流程图 ┌───────────────────────┐ ┌─>│ timers │<----- 执行 setTimeout().set ...

  3. js异步、事件循环(EventLoop)小结

    单线程 众所周知,JS是单线程的语言,之所以是单线程,用一句烂大街的话就是,如果两个线程同时操作一个DOM节点,那么该以哪个为准呢,虽然多线程也有办法解决,但是js毕竟是浏览器脚本语言,不需要那么复杂 ...

  4. (二)Netty源码学习笔记之服务端启动

    尊重原创,转载注明出处,原文地址:http://www.cnblogs.com/cishengchongyan/p/6129971.html  本文将不会对netty中每个点分类讲解,而是一个服务端启 ...

  5. Netty入门(2) - 核心概念

    Netty Crash Course 一个Netty程序一般开始于Bootstrap类,通过设置程序后,使用Handlers来处理特定的event和设置Netty中的事件,从而处理多个协议数据,比如实 ...

  6. 浏览器事件循环 & nodejs事件循环

    第1篇:如何理解EventLoop——宏任务和微任务篇 宏任务(MacroTask)引入 在 JS 中,大部分的任务都是在主线程上执行,常见的任务有: 渲染事件 用户交互事件 js脚本执行 网络请求. ...

  7. Netty源码解析 -- 事件循环机制实现原理

    本文主要分享Netty中事件循环机制的实现. 源码分析基于Netty 4.1 EventLoop 前面分享服务端和客户端启动过程的文章中说过,Netty通过事件循环机制(EventLoop)处理IO事 ...

  8. 对javascript EventLoop事件循环机制不一样的理解

    前置知识点: 浏览器原理,浏览器内核5种线程及协作,JS引擎单线程设计推荐阅读: 从浏览器多进程到JS单线程,JS运行机制最全面的一次梳理 [FE]浏览器渲染引擎「内核」 js异步编程,Promise ...

  9. JS中EventLoop、宏任务与微任务的个人理解

    为什么要EventLoop? JS 作为浏览器脚本语言,为了避免复杂的同步问题(例如用户操作事件以及操作DOM),这就决定了被设计成单线程语言,而且也将会一直保持是单线程的.而在单线程中若是遇到了耗时 ...

随机推荐

  1. python全栈开发之OS模块的总结

    OS模块 1. os.name()      获取当前的系统 2.os.getcwd      #获取当前的工作目录 import os cwd=os.getcwd() # dir=os.listdi ...

  2. 如何生成.a文件,小心有坑!!

    .a文件是一种对实现文件细节进行隐藏的打包文件. 由于是打包文件,所以需要创建工程,将功能代码添加到工程.下面是创建.a文件的具体步骤: Step One:打开Xcode(此处使用的Xcode 8.2 ...

  3. reading list

    Machine  Learning1. Deep Learningimagenet classification with deep convolutional neural networks. 20 ...

  4. Linux性能测试分析命令_sar+iostat+vmstat+top

    sar主要用于收集并统计系统资源的信息,包括CPU.IO.内存.网卡流量等. vmstat命令主要是对操作系统的虚拟内存.进程.IO读写.CPU活动等整体情况进行统计.但是它不能对某个进程进行深入分析 ...

  5. jQuery双向滑动杆 设置数值百分比

    在线演示 本地下载

  6. void及void指针介绍【转】

    本文转载自:http://blog.csdn.net/renren900207/article/details/20769503 void类型指针(如void *p)所指向的数据类型不是确定的,或者说 ...

  7. WIN10 安装Docker MySQL Ubuntu

    1)   必须专业版, 要开启 Hyper-V 2)下载安装包: 链接:https://pan.baidu.com/s/1APqcq2glvwzsCHlwRnPXkA 密码:wpej 3)安装时不要勾 ...

  8. HDU 1241 油田

    这道题明明很简单但不知道为什么运行结果一直错,但提交却是对的!代码真是神奇,不过我猜测可能是提上给出的数据错了,可能提上给的数据m和n后多给了一个空格或回车,但题的数据没有 #include<s ...

  9. 配置Nginx反向代理服务器

    一.主要配置文件:/etc/nginx/nginx.conf 内容如下图 扩展配置文件:/etc/nginx/conf.d/*.conf 图中的主配置文件的末尾,加载所有扩展配置文件里面以.conf结 ...

  10. 转 : Java的版本特性与历史

    Java Versions, Features and History This article gives you a highlight of important features added i ...