Java:确保线程永远不会进行上下文切换

PHc*_*Der 5 java linux multithreading operating-system

比如说 20 核机器上大约有 150 个线程。我希望特定线程永远不会进行上下文切换。我不确定将线程优先级设置为 MAX_PRIORITY 是否会执行此操作?另外,如果我们将优先级设置为 max,操作系统是否有必要遵循指令(假设我在 sudo 模式下运行)?

ck1*_*ck1 5

您不能完全禁用线程上下文切换,而是通过将线程优先级设置为MAX_PRIORITY您可以告诉操作系统线程调度程序(如果它支持优先级调度策略)在较高优先级线程准备好运行时抢占较低优先级线程。

参考

java.lang.Thread Javadoc

每个线程都有一个优先级。具有较高优先级的线程优先于具有较低优先级的线程执行。

https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html

Linux 内核线程调度程序 API 手册页

关于优先级:

从概念上讲,调度程序为每个可能的 sched_priority 值维护一个可运行线程列表。为了确定接下来运行哪个线程,调度程序会查找具有最高静态优先级的非空列表,并选择位于该列表头部的线程。

关于抢占:

所有调度都是抢占式的:如果具有较高静态优先级的线程准备好运行,则当前正在运行的线程将被抢占并返回到其静态优先级的等待列表。

http://man7.org/linux/man-pages/man7/sched.7.html


Cho*_*ahi 1

您应该将线程优先级设置为 MAX_PRIORITY。这将确保您想要的线程在您希望它运行时就可以运行。这本质上就像它永远不会进行上下文切换。这应该可以解决您的问题。