Nodejs 中event loop是事件驱动 还是轮询的
nodejs 去检查timers, poll等的event loop是怎么触发的,如果是轮询,时间间隔多少
14 回复
- event loop是基于事件驱动的,检查到了事件就去执行,本身就是个死循环,和轮询没有太大关系
- 执行完某个阶段的回调后自动跳到下一个阶段,这里没有轮询
- poll阶段使用epoll_wait()来查询是否有新的event,它已经不能称之为轮询了,因为只有timeout属性,没有多次查询,这个超时时间和poll阶段本身的阻塞时间是有关联的
int epoll_wait(uv__os390_epoll* ep, struct epoll_event *events, int maxevents, int timeout);
@Yuki-Minakami 那个太靠后了
{
SealHandleScope seal(isolate);
bool more;
do {
v8_platform.PumpMessageLoop(isolate);
more = uv_run(env.event_loop(), UV_RUN_ONCE);
if (more == false) {
v8_platform.PumpMessageLoop(isolate);
EmitBeforeExit(&env);
// Emit `beforeExit` if the loop became alive either after emitting
// event, or after running some callbacks.
more = uv_loop_alive(env.event_loop());
if (uv_run(env.event_loop(), UV_RUN_NOWAIT) != 0)
more = true;
}
} while (more == true);
}