Node.js内部机制研究:set_immediate_callback_function定义查找问题
set_immediate_callback_function 实现原理解答
为什么找不到显式的方法定义
set_immediate_callback_function不是手写实现的C++方法,是Node.js源码通过宏自动生成的属性设置器- 相关宏定义在
src/env.h头文件中,ENVIRONMENT_STRONG_PERSISTENT_VALUE_PROP宏会为Environment类的每个绑定的持久化V8值,自动生成对应的set_xxx和get_xxx方法,不需要手动编写实现代码 immediate_callback_function本质是Environment类持有的一个持久化V8函数引用,专门存储JS层传递的immediate队列调度逻辑
SetupTimers函数的作用
你贴出的代码是Node.js初始化定时器模块时的C++绑定逻辑:
void SetupTimers(const FunctionCallbackInfo<Value>& args) { CHECK(args[0]->IsFunction()); CHECK(args[1]->IsFunction()); auto env = Environment::GetCurrent(args); env->set_immediate_callback_function(args[0].As<Function>()); env->set_timers_callback_function(args[1].As<Function>()); }
这段代码会把JS层传入的两个调度函数分别存入Environment实例的对应属性中,其中第一个函数就是immediate队列的处理逻辑,第二个是setTimeout/setInterval对应的定时器队列处理逻辑。
check阶段的调用逻辑
- 事件循环进入check阶段后,会触发
Environment::RunImmediateCallbacks方法 - 该方法会调用之前存储的
immediate_callback_function,切入JS层执行所有已到期的setImmediate回调 - 所有immediate回调执行完成后,check阶段结束,进入事件循环的下一个处理阶段
内容的提问来源于stack exchange,提问作者Eduard Hasanaj
相关产品推荐
相关产品推荐

