首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

nodejs的setTimeout(fn,0)和setImmediate谁先执行的问题

我们首先看一下下面这段代码 setTimeout(()=>{ console.log('setTimeout'); },0) setImmediate(()=>{ console.log('setImmedate...setTimeout是属于定时器阶段,setImmediate是属于check阶段。顺序上定时器阶段是比check更早被执行的。...在分析nodejs的setImmediate和setTimeout的文章中已经介绍过这两个函数对应的实现原理。这里就不细说了。其中setTimeout的实现代码里有一个很重要的细节。...nodejs启动的时候,会编译执行上面的代码,开始一个定时器,挂载一个setImmediate节点在队列。...这时候就会执行setImmediate的回调。所以,一开始的那段代码的输出结果是取决于启动定时器的时间到libuv执行定时器阶段是否过去了1毫秒。

1.5K20

setTimeout和setImmediate到底谁先执行,本文让你彻底理解Event Loop

JS异步是怎么实现的 我们都知道JS是单线程的,那单线程是怎么实现异步的呢?事实上所谓的"JS是单线程的"只是指JS的主运行线程只有一个,而不是整个运行环境都是单线程。...JS引擎线程 这个线程就是负责执行JS的主线程,前面说的"JS是单线程的"就是指的这个线程。大名鼎鼎的Chrome V8引擎就是在这个线程运行的。需要注意的是,这个线程跟GUI线程是互斥的。...互斥的原因是JS也可以操作DOM,如果JS线程和GUI线程同时操作DOM,结果就混乱了,不知道到底渲染哪个结果。这带来的后果就是如果JS长时间运行,GUI线程就不能执行,整个页面就感觉卡死了。...Event Loop 所谓Event Loop,就是事件循环,其实就是JS管理事件执行的一个流程,具体的管理办法由他具体的运行环境确定。目前JS的主要运行环境有两个,浏览器和Node.js。...常见宏任务有: script (可以理解为外层同步代码) setTimeout/setInterval setImmediate(Node.js) I/O UI事件 postMessage 常见微任务有

83831

到底什么是Event Loop?那就来了解一下JavaScript分别在浏览器和Node环境下的运行机制吧

那当然是JS所处的运行环境提供的了,而JS最主要的两个运行环境就是:浏览器 和 Node,我们接下来也会基于这两个运行环境,对JS的运行机制进行讲解 二、浏览器中的JavaScript 之所以JS能在浏览器中运行...三、Node.js中的JavaScript 注: 此次讨论的都是针对Node.js 11.x以上的版本 本文分别讨论了JS在浏览器环境和Node.js环境这两种情况,那自然是有所区别的,后者相对于前者的过程分得更加细致...名称 举例(常用) 宏任务 setTimeout 、setInterval 、setImmediate 微任务 Promise 、process.nextTick 可以看到,在Node.js对比浏览器多了两个任务...,分别是宏任务 setImmediate 和 微任务 process.nextTick setImmediate 会在 check 阶段被处理 process.nextTick 是Node.js中一个特殊的微任务...('setImmediate'); }) 我们用node运行该段代码多次,发现得到了如下两种结果: // 第一种结果 setTimeout setImmediate // 第二种结果 setImmediate

69400

JavaScript定时器与执行机制详细介绍

JS执行机制 浏览器(或者说JS引擎)执行JS的机制是基于事件循环。 由于JS是单线程,所以同一时间只能执行一个任务,其他任务就得排队,后续任务必须等到前一个任务结束才能开始执行。...为了避免因为某些长时间任务造成的无意义等待,JS引入了异步的概念,用另一个线程来管理异步任务。 ? 同步任务直接在主线程队列中顺序执行,而异步任务会进入另一个任务队列,不会阻塞主线程。...JS定时器 JS的定时器目前有三个:setTimeout、setInterval和setImmediate。...而且Promise的延迟比setImmediate更低,意味着Promise比setImmediate先执行。...可以肯定的是,在各JS环境中,Promise都是最先执行的,setTimeout(0)、setImmediate和requestAnimationFrame顺序不确定。

82710

JS 事件循环 Node 篇

JS 事件循环 Node 篇 之前介绍过浏览器中的事件循环,本文将详细介绍 Node 中的事件循环。...根据 Node.js 官方介绍,每次事件循环都包含了6个阶段,如下图所示 image-20220404145555012 「注意」:每个框被称为事件循环机制的一个阶段。...Node.js 与浏览器的 Event Loop 差异 浏览器环境下,microtask的任务队列是每个macrotask执行完之后执行。...浏览器端 而在Node.js中,microtask会在事件循环的各个阶段之间执行,也就是一个阶段执行完毕,就会去执行microtask队列的任务。...总结 Node.js 的事件循环分为6个阶段 浏览器和Node 环境下,microtask任务队列的执行时机不同 Node.js中,microtask 在事件循环的各个阶段之间执行 浏览器端,microtask

2.2K10

宏任务和微任务到底是什么?

首先,我们需要先知道JS运行机制。 JS运行机制 概念1: JS是单线程执行 ”JS是单线程的”指的是JS 引擎线程。 在浏览器环境中,有JS 引擎线程和渲染线程,且两个线程互斥。...概念4:Event Loop JS到底是怎么运行的呢? ? image JS引擎常驻于内存中,等待宿主将JS代码或函数传递给它。...UI rendering/UI事件4. postMessage,MessageChannel5. setImmediate,I/O(Node.js) 1. Promise2....setImmediate和process.nextTick为Node环境下常用的方法(IE11支持setImmediate),所以,后续的分析都基于Node宿主。...setImmediate'); }); 其执行顺序为: 遇到setTimeout,虽然设置的是0毫秒触发,但是被node.js强制改为1毫秒,塞入times阶段 遇到setImmediate塞入check

4.9K52

多图生动详解浏览器与Node环境下的Event Loop

那当然是JS所处的运行环境提供的了,而JS最主要的两个运行环境就是:浏览器 和 Node,我们接下来也会基于这两个运行环境,对JS的运行机制进行讲解 二、浏览器中的JavaScript 之所以JS能在浏览器中运行...三、Node.js中的JavaScript 注: 此次讨论的都是针对Node.js 11.x以上的版本 本文分别讨论了JS在浏览器环境和Node.js环境这两种情况,那自然是有所区别的,后者相对于前者的过程分得更加细致...(1)node中的Event Loop 我们来看一张Node.js的 Event Loop 简图 Node.js的Event Loop 是基于libuv实现的 通过 Node.js 的官方文档可以得知...名称 举例(常用) 宏任务 setTimeout 、setInterval 、setImmediate 微任务 Promise 、process.nextTick 可以看到,在Node.js对比浏览器多了两个任务...,分别是宏任务 setImmediate 和 微任务 process.nextTick setImmediate 会在 check 阶段被处理 process.nextTick 是Node.js中一个特殊的微任务

60420

Node.js的事件循环(Event loop)、定时器(Timers)和 process.nextTick()

当有操作完成时,内核会告诉 Node.js,Node.js 将合适的回调加入轮询队列等待被执行。...setImmediate() VS setTimeout() setImmediate() 和 setTimeout() 很像,区别在于执行的时间点: setImmediate() 在当前轮询阶段完成后执行...=> { console.log('timeout'); }, 0); setImmediate(() => { console.log('immediate'); }); $ node timeout_vs_immediate.js...timeout immediate $ node timeout_vs_immediate.js immediate timeout 然而,如果将这两个的调用放在一个 I/O 循环里, setImmediate...我们建议开发者在所有情况下都使用 setImmediate() 而不是 process.nextTick() 因为 setImmediate() 更容易被理解(且带来更广泛的兼容性,如浏览器 JS )。

1.4K30

扫码

添加站长 进交流群

领取专属 10元无门槛券

手把手带您无忧上云

扫码加入开发者社群

相关资讯

热门标签

活动推荐

    运营活动

    活动名称
    广告关闭
    领券