performance.eventLoopUtilization([utilization1[, utilization2]])
utilization1
<Object> 上一次调用eventLoopUtilization()
的结果。utilization2
<Object> 在utilization1
之前调用eventLoopUtilization()
的结果。- 返回 <Object>
eventLoopUtilization()
方法返回包含事件循环作为高解析度毫秒计时器的既空闲又活动的累积持续时间的对象。
utilization
值是计算的事件循环利用率 (ELU)。
如果主线程上的引导尚未完成,则属性的值为 0
。
由于引导发生在事件循环内,所以 ELU 立即在工作线程上可用。
utilization1
和 utilization2
都是可选参数。
如果传入了 utilization1
,则计算当前调用的 active
和 idle
之间的差值,以及对应的 utilization
值(类似于 process.hrtime()
)。
如果传入了 utilization1
和 utilization2
,则计算两个参数之间的增量。
这是便捷的选项,因为与 process.hrtime()
不同,计算 ELU 比单个减法更复杂。
ELU 类似于 CPU 使用率,不同之处在于它只测量事件循环统计信息而不是 CPU 使用率。
它表示事件循环在事件循环的事件提供者(例如 epoll_wait
)之外花费的时间百分比。
不考虑其他 CPU 空闲时间。
以下是主要空闲进程如何具有高 ELU 的示例。
'use strict';
const { eventLoopUtilization } = require('perf_hooks').performance;
const { spawnSync } = require('child_process');
setImmediate(() => {
const elu = eventLoopUtilization();
spawnSync('sleep', ['5']);
console.log(eventLoopUtilization(elu).utilization);
});
虽然运行这个脚本时 CPU 大部分是空闲的,但 utilization
的值为 1
。
这是因为对 child_process.spawnSync()
的调用阻止了事件循环的进行。
传入用户定义的对象而不是先前调用 eventLoopUtilization()
的结果将导致未定义的行为。
不保证返回值反映事件循环的任何正确状态。
utilization1
<Object> The result of a previous call toeventLoopUtilization()
.utilization2
<Object> The result of a previous call toeventLoopUtilization()
prior toutilization1
.- Returns <Object>
The eventLoopUtilization()
method returns an object that contains the
cumulative duration of time the event loop has been both idle and active as a
high resolution milliseconds timer. The utilization
value is the calculated
Event Loop Utilization (ELU).
If bootstrapping has not yet finished on the main thread the properties have
the value of 0
. The ELU is immediately available on Worker threads since
bootstrap happens within the event loop.
Both utilization1
and utilization2
are optional parameters.
If utilization1
is passed, then the delta between the current call's active
and idle
times, as well as the corresponding utilization
value are
calculated and returned (similar to process.hrtime()
).
If utilization1
and utilization2
are both passed, then the delta is
calculated between the two arguments. This is a convenience option because,
unlike process.hrtime()
, calculating the ELU is more complex than a
single subtraction.
ELU is similar to CPU utilization, except that it only measures event loop
statistics and not CPU usage. It represents the percentage of time the event
loop has spent outside the event loop's event provider (e.g. epoll_wait
).
No other CPU idle time is taken into consideration. The following is an example
of how a mostly idle process will have a high ELU.
'use strict';
const { eventLoopUtilization } = require('perf_hooks').performance;
const { spawnSync } = require('child_process');
setImmediate(() => {
const elu = eventLoopUtilization();
spawnSync('sleep', ['5']);
console.log(eventLoopUtilization(elu).utilization);
});
Although the CPU is mostly idle while running this script, the value of
utilization
is 1
. This is because the call to
child_process.spawnSync()
blocks the event loop from proceeding.
Passing in a user-defined object instead of the result of a previous call to
eventLoopUtilization()
will lead to undefined behavior. The return values
are not guaranteed to reflect any correct state of the event loop.