“nice”是否会影响Java线程的优先级

时间:2017-05-04 15:00:53

标签: java linux multithreading thread-priority nice

在Unix系统上,您可以使用nice命令以较低的CPU优先级运行进程:

 nice program

您可以使用它来运行JVM进程:

 nice java -jar program.jar

该JVM进程运行的Java程序将启动多个线程。

nice更改是否会影响这些Java线程的调度?也就是说,Java线程在以

运行时具有较低的CPU优先级
 nice java -jar program.jar

运行时
 java -jar program.jar

一般情况下,这将取决于系统,因此我对Linux案例感兴趣。

3 个答案:

答案 0 :(得分:2)

根据ps报告将好处应用于java线程。我使用等待用户输入的java应用程序运行此快速测试:

启动流程:nice -n 19 java Main
输出ps -m -l 20746

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
0 -  1000 20746 10006  0   -   - - 1739135 -    pts/2      0:00 java Main
0 S  1000     -     -  0  99  19 -     - futex_ -          0:00 -
1 S  1000     -     -  0  99  19 -     - wait_w -          0:00 -
1 S  1000     -     -  0  99  19 -     - futex_ -          0:00 -
1 S  1000     -     -  0  99  19 -     - futex_ -          0:00 -

启动流程:nice -n 15 java Main
输出ps -m -l 21488

F S   UID   PID  PPID  C PRI  NI ADDR SZ WCHAN  TTY        TIME CMD
0 -  1000 21488 10006  0   -   - - 1722494 -    pts/2      0:00 java Main
0 S  1000     -     -  0  95  15 -     - futex_ -          0:00 -
1 S  1000     -     -  0  95  15 -     - wait_w -          0:00 -
1 S  1000     -     -  0  95  15 -     - futex_ -          0:00 -
1 S  1000     -     -  0  95  15 -     - futex_ -          0:00 -

NI列似乎反映了我传递给nice的内容,优先级也相应地发生了变化。我使用jps获得了进程ID(20746,21488)。

请注意,例如,运行jstack 21488不会提供上述信息。

我在Ubuntu 16.04 LTS(64位)

上运行了上述内容

答案 1 :(得分:1)

实际上......根据POSIX.1,Niceness是应用程序的属性。这是一篇更详细的文章。 is nice() used to change the thread priority or the process priority?

答案 2 :(得分:0)

Java并不特别。它只是一个过程,操作系统以与任何其他过程相同的方式设置其“好处”。

在Linux上,Java线程是使用本机线程实现的,因此,“niceness”受OS控制的约束,与任何其他本机线程一样。