Web 模块之间是否共享线程?

Are threads shared among web modules?

我知道网络服务器使用线程池来避免昂贵的线程创建操作。我的问题是,线程池是否共享部署在同一 Web 服务器上的不同模块?

特别是,我们部署了两个 Web 模块。仅在一个模块中定义的过滤器会设置一个线程局部变量(并且永远不会取消设置)。由于同一个线程在那里被重用,它在另一个 Web 模块中是否也可见?

谢谢

我不确定所有服务器,但在 Tomcat 的情况下,线程池是为给定端口设置的。因此,如果您的模块部署在不同的端口下,那么每个模块都将拥有单独的线程池。因此 threadLocal 仅对给定模块可见。

Tomcat 配置中的示例摘录。我猜其他服务器使用类似的方法。

这在很大程度上取决于网络服务器技术。

Node.js 例如 运行s 每个模块在它自己的单独进程中。每个进程都有一个线程 运行ning 服务器模块的 JavaScript 代码和其他节点 运行time libuv 线程在线程池中执行异步工作在引擎盖下。因为每个模块 运行s 在它自己的进程中,它会有它自己的线程池,不与其他模块共享。不同进程不能共享同一个线程池。

故事的寓意是,如果不同的 Web 模块以某种方式 运行 在同一个进程中,那么理论上它们可以共享同一个线程池,但是如果每个 Web 服务器 运行 部署web 模块在它自己的进程中,那么它们不可能共享同一个线程池。