首页 文章

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

提问于
浏览
2

在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 回答

  • 1

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

  • 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位)上运行了上述内容

  • 0

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

    在Linux上,Java线程是使用本机线程实现的,因此,“niceness”受OS控制的影响与任何其他本机线程相同 .

相关问题