Node.js - os.setPriority() 方法



Node.js os.setPriority() 方法将允许设置由进程 ID (pid) 指定的进程的调度优先级。

优先级是一个整数,它指定了我们想要设置的调度进程优先级。输入优先级必须介于 −20(高优先级)和 19(低优先级)之间。

由于 POSIX 系统的优先级与 Windows 系统的优先级不同,因此Node.js为我们提供了具有不同进程优先级的常量,它们位于 os.constants.priority 常量中。在 Windows 上,需要提升权限才能将进程优先级设置为PRIORITY_HIGHEST。如果运行该程序的用户没有权限,则该权限将减少到PRIORITY_HIGH

语法

以下是Node.js os.setPriority()方法的语法 -


 os.setPriority([pid, ] priority)

参数

  • pid − (可选) 这是进程 ID,一个整数,用于标识应设置优先级的正在运行的进程。默认值为 0。这是一个可选参数。
  • priority − (必填) 第二个参数是优先级,这是一个整数,表示我们希望设置的进程优先级的调度。范围从最高优先级的 −20 到最低优先级的 19。这是必需的参数。

返回值

此方法不返回任何内容,而是设置 pid 指定的调度优先级。

以下是 Node.js 提供的优先级常量 -

  • PRIORITY_LOW - 这是最低的进程调度优先级。在 Windows 上,这对应于 IDLE PRIORITY CLASS,在所有其他平台上,它的值为 19。
  • PRIORITY_BELOW_NORMAL - 在Windows上,这对应于BELOW_NORMAL_PRIORITY_CLASS,而在所有其他平台上,它的值为10。
  • PRIORITY_NORMAL - 这是默认的进程调度优先级,对应于 Windows 上的 NORMAL_PRIORITY_CLASS。在所有其他平台上,0 是一个不错的值。
  • PRIORITY_ABOVE_NORMAL - 这对应于 Windows 和所有其他平台上的 ABOVE_NORMAL_PRIORITY_CLASS,它的值为 -7。
  • PRIORITY_HIGH - 在Windows上,这对应于HIGH_PRIORITY_CLASS,而在所有其他平台上,它的值为-14。
  • PRIORITY_HIGHEST - 这是最高的进程计划优先级,对应于 Windows 上的REALTIME_PRIORITY_CLASS。−20 在所有其他平台上都是一个不错的值。

在以下示例中,我们尝试将当前进程的优先级设置为 0。


const os = require('os');
os.setPriority(0);
console.log(os.getPriority());

输出

/home/cg/root/63a002c52763b/main.js:3
os.setPriority(0);
^

TypeError: os.setPriority is not a function
at Object.<anonymous> (/home/cg/root/63a002c52763b/main.js:3:4)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:238:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)

注意 - 为了获得准确的结果,最好在本地执行上述代码。

执行上述程序后,setPriority() 方法将当前进程的优先级设置为 0。由于 setPriority() 不返回任何内容,我们记录了 getPriority() 方法,它打印了当前进程的优先级。

0

在下面的示例中,我们尝试将当前进程的优先级设置为 19。


const os = require('os');
os.setPriority(19);
console.log(os.getPriority());

错误

home/cg/root/63a002c52763b/main.js:3
os.setPriority(19);
^

TypeError: os.setPriority is not a function
at Object.<anonymous> (/home/cg/root/63a002c52763b/main.js:3:4)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:238:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)

注意 - 为了获得准确的结果,最好在本地执行上述代码。

执行上述程序后,19 个设置为调度优先级的 pid。然后。getPriority() 方法打印当前进程的调度优先级。

19

注意 - 如果运行该程序的用户没有权限,则该权限将减少到PRIORITY_HIGH

在以下示例中,我们使用 setPriority() 方法将当前进程的优先级设置为 -20。


const os = require('os');
os.setPriority(-20);
console.log(os.getPriority());

错误

/home/cg/root/63a002c52763b/main.js:3
os.setPriority(-20);
^

TypeError: os.setPriority is not a function
at Object.<anonymous> (/home/cg/root/63a002c52763b/main.js:3:4)
at Module._compile (internal/modules/cjs/loader.js:702:30)
at Object.Module._extensions..js (internal/modules/cjs/loader.js:713:10)
at Module.load (internal/modules/cjs/loader.js:612:32)
at tryModuleLoad (internal/modules/cjs/loader.js:551:12)
at Function.Module._load (internal/modules/cjs/loader.js:543:3)
at Function.Module.runMain (internal/modules/cjs/loader.js:744:10)
at startup (internal/bootstrap/node.js:238:19)
at bootstrapNodeJSCore (internal/bootstrap/node.js:572:3)

注意 - 为了获得准确的结果,最好在本地执行上述代码。

执行上述程序后,运行上述程序的用户没有权限,它慢慢减少到 PRIORITY_HIGH (-14)。

-14