服务器线程与 JVM 线程

问题描述 投票:0回答:1

我们以 Java Web 服务为例。现在,我们从客户端访问端点,请求由服务器(tomcat)线程接收。然后这个服务器线程将请求执行部分交给JVM线程?

我对这次互动期间发生的事情有点困惑。服务器和 JVM 及其线程交互如何工作?

这主要是知识问题。我尝试阅读很多文章。我了解两者的线程是相互独立的。但对于这两者之间如何相互作用仍然存在困惑。

java server jvm
1个回答
0
投票

如果您不是在谈论虚拟线程或绿色线程,那么服务器线程和 JVM 线程之间就没有分离。 JVM 线程是操作系统(服务器)线程。

当您运行 Java Web 服务器时,它会创建一堆线程(线程池)。无论线程池的实现如何,最终都会用到Thread类。然而,Thread 的实现对操作系统进行了一系列系统调用,以便操作系统在其级别上创建线程。例如。

new Thread
翻译为 pthread_create:

class Thread {

    public Thread(Runnable r) {
         this.runnable = r;
         _createThread();
    }

    private native void _createThread(); // implemented in C++ as part of JVM
}

操作系统级别上服务器线程的实现然后执行 C++“适配器”函数,该函数是 Java 运行时的一部分。这个“适配器”函数的任务是将执行委托给 Java 代码。

void * adapter_function(void *params) {
    JVM_Object obj = JVM_GetObject(params);
    JVM_String methodName = JVM_NewString("run");
    JVM_ExecuteJavaMethod(obj, methodName);
}

对于Web服务器,方法(用Java实现)由Web服务器本身(例如Tomcat)提供,并且只是在阻塞队列中等待新任务。

当您到达端点时,有另一个线程只是在套接字上等待,并在收到新请求后将请求放入队列中。

当然,这只是实现服务器的一种方法,但我希望它有助于阐明线程如何工作

© www.soinside.com 2019 - 2024. All rights reserved.