处理线程和进程上下文切换

时间:2017-06-09 12:32:18

标签: multithreading process

每个Tomcat服务器都在自己的JVM上运行,每个JVM都是操作系统中的一个独立进程。现在我在Tomcat中部署了多个应用程序,它拥有自己的上下文和自己的类加载器。如果我在每个应用程序中运行多个Thread,那么操作系统如何处理此Thread切换以及整个JVM作为进程如何与其他进程切换。这些JVM进程和Java线程如何在上下文切换方面相关。它在大多数最新的操作系统中如何工作。

1 个答案:

答案 0 :(得分:1)

在Linux中,线程的实现方式与进程大致相同。因此调度程序并不关心进程,而是在线程之间切换。阅读here更多低级别说明。

现在JVM是一个通常有很多线程的进程。它们中的每一个都是一对一地映射到某个linux进程。在这种情况下,调度程序将分配时间段(特定线程的运行时间),无论哪个进程(在您的情况下为JVM)拥有此线程。这意味着如果一个JVM的总线程数比其他JVM多十倍,那么第一个JVM的CPU比另一个JVM的耗时更多。

您可以通过多种方式影响此行为。

  • 您可以在操作系统中更改调度程序算法
  • 您可以更改特定线程的优先级。在这种情况下,它将比同一JVM中的其他线程和来自其他JVM的线程获得更多时间。您可以通过java和Linux终端(nice command
  • 来确定优先级
  • 您可以将特定线程绑定到某组CPU。使用taskset命令。每个线程都有自己的PID,您可以借助jstack实用程序(与JDK捆绑在一起)获得