Krr*_*Raj 7 javascript event-loop node.js
我正在通过节点文档进行事件循环,我感到非常困惑.它说 -
timers: this phase executes callbacks scheduled by setTimeout() and
setInterval().
I/O callbacks: executes almost all callbacks with the exception of close callbacks, the ones scheduled by timers, and setImmediate().
idle, prepare: only used internally.
poll: retrieve new I/O events; node will block here when appropriate.
check: setImmediate() callbacks are invoked here.
close callbacks: e.g. socket.on('close', ...).
Run Code Online (Sandbox Code Playgroud)
然后在详细的轮询阶段,他们说它执行使用计时器调度的计时器,并且还处理轮询队列中的i/o事件.我的困惑是,我们已经有那些回调的计时器阶段和i/o回调阶段,然后轮询阶段完成的工作是什么.它还说线程可能在轮询阶段睡觉,但我没有正确.
我的问题是 -
在这一点上我很困惑.任何帮助将不胜感激.
sle*_*man 10
该poll阶段归结为异步 I/O 等待。Libuv 将根据操作系统使用不同的 API,但它们通常都具有相同的模式。我将使用select()作为一个例子。
基本上是poll这样的系统调用:
select(maxNumberOfIO, readableIOList, writableIOList, errorIOList, timeout);
Run Code Online (Sandbox Code Playgroud)
该函数会阻塞。如果没有timeout指定值,它将永远阻塞。
结果是,只要没有 I/O 活动,node.js 将无法执行任何 javascript。这显然使得不可能执行基于时间的回调,如setTimeout()或setInterval()。
因此,节点在调用这样的函数之前需要做的就是计算要传递什么值timeout。它通常通过遍历所有计时器的列表并计算出可以等待 I/O 的最短时间(下一个最近的计时器)并将其用作超时值来实现此目的。它基本上处理所有计时器,但不执行它们的回调,它是为了计算等待时间。
| 归档时间: |
|
| 查看次数: |
973 次 |
| 最近记录: |