• Node.js Video Tutorials

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,在所有其他平台上,它的 nice 值为 19。

  • PRIORITY_BELOW_NORMAL - 在 Windows 上,这对应于 BELOW_NORMAL_PRIORITY_CLASS,在所有其他平台上,它的 nice 值为 10。

  • PRIORITY_NORMAL - 这是默认的进程调度优先级,它对应于 Windows 上的 NORMAL_PRIORITY_CLASS。在所有其他平台上,0 是 nice 值。

  • PRIORITY_ABOVE_NORMAL - 这对应于 Windows 上的 ABOVE_NORMAL_PRIORITY_CLASS,在所有其他平台上,它的 nice 值为 -7。

  • PRIORITY_HIGH - 在 Windows 上,这对应于 HIGH_PRIORITY_CLASS,在所有其他平台上,它的 nice 值为 -14。

  • PRIORITY_HIGHEST - 这是最高的进程调度优先级,它对应于 Windows 上的 REALTIME_PRIORITY_CLASS。在所有其他平台上,-20 是 nice 值。

示例

在以下示例中,我们尝试将当前进程的优先级设置为 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
nodejs_os_module.htm
广告