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



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

在 Linux 中,线程的实现方式与进程大致相同。所以调度程序不太关心进程,而是在线程之间切换。在这里阅读更多低级解释。

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

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

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

最新更新