java - "nice"是否影响Java线程的优先级

标签 java linux multithreading thread-priority nice

在 Unix 系统上,您可以以较低的 CPU“优先级”运行进程(迂腐地说,它不会改变所谓的 priority ,而是影响使用的可用 CPU 时间份额,即一般意义上的“优先级”)使用 nice命令:

 nice program

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

 nice java -jar program.jar

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

nice 是吗?改变会影响那些Java线程的调度吗?也就是说,Java 线程在运行时是否具有较低的 CPU 优先级

 nice java -jar program.jar

当运行时

 java -jar program.jar

一般来说,这取决于系统,所以我对 Linux 案例感兴趣。

最佳答案

根据 ps 报告,niceness 应用于 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 列似乎反射(reflect)了我传递给 nice 的内容,优先级也相应变化。我使用 jps 获取了进程 ID (20746, 21488)。

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

我在 Ubuntu 16.04 LTS(64 位)上运行了上面的内容

关于java - "nice"是否影响Java线程的优先级,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43786492/

相关文章:

java - 当在JSP中单击提交按钮时,如何将HTML5验证添加到隐藏标签中?

java - 当按位操作字节时会发生什么?

python - 如何运行多线程Python脚本

java - 使用网络客户端发布数据

java - 使用 apache poi 循环数组数据

linux - 如何使用带有序列号的 Linux shell 变量?

linux - Apache和linux文件权限无法浏览文件或目录

java - 将 Spring Boot 应用程序作为 systemd 服务运行时未创建 pid 文件

android - 通过蓝牙发送对象或两个字符串?

python - 这是子类化 python 线程以接受变量更新的有效方法吗?