我们以 Java Web 服务为例。现在,我们从客户端访问端点,请求由服务器(tomcat)线程接收。然后这个服务器线程将请求执行部分交给JVM线程?
我对这次互动期间发生的事情有点困惑。服务器和 JVM 及其线程交互如何工作?
这主要是知识问题。我尝试阅读很多文章。我了解两者的线程是相互独立的。但对于这两者之间如何相互作用仍然存在困惑。
如果您不是在谈论虚拟线程或绿色线程,那么服务器线程和 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)提供,并且只是在阻塞队列中等待新任务。
当您到达端点时,有另一个线程只是在套接字上等待,并在收到新请求后将请求放入队列中。
当然,这只是实现服务器的一种方法,但我希望它有助于阐明线程如何工作