Skip to content

[node]关于setImmediate和process.nextTick的区别 #2

@VaJoy

Description

@VaJoy

setImmediateprocess.nextTick都会在下一个 event loop 时执行,但是它们有如下区别:

  1. setImmediate不会call stack,可以用于大规模异步递归调用。而process.nextTick受到 maxTickDepth(默认为1000) 的限制,超过其数值会出错。

setImmediate(handler) 并不像 setTimeout(handler, 0) 由event loop检测系统时间是否到点然后向事件队列插入一个事件,然后调用事件的回调方法handler。而是监控UI线程的调用栈,一旦调用栈为空则将handler压栈。

  1. setImmediate可视为“排队等候的人”,而 process.nextTick 是“插队的人”,其区别可见下图:
    区别
    其中“等待队列”可以是诸如A事件之前触发的 setTimeout 时间队列

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions