Web 模块之间是否共享线程?
Are threads shared among web modules?
我知道网络服务器使用线程池来避免昂贵的线程创建操作。我的问题是,线程池是否共享部署在同一 Web 服务器上的不同模块?
特别是,我们部署了两个 Web 模块。仅在一个模块中定义的过滤器会设置一个线程局部变量(并且永远不会取消设置)。由于同一个线程在那里被重用,它在另一个 Web 模块中是否也可见?
谢谢
我不确定所有服务器,但在 Tomcat 的情况下,线程池是为给定端口设置的。因此,如果您的模块部署在不同的端口下,那么每个模块都将拥有单独的线程池。因此 threadLocal 仅对给定模块可见。
Tomcat 配置中的示例摘录。我猜其他服务器使用类似的方法。
这在很大程度上取决于网络服务器技术。
Node.js 例如 运行s 每个模块在它自己的单独进程中。每个进程都有一个线程 运行ning 服务器模块的 JavaScript 代码和其他节点 运行time libuv 线程在线程池中执行异步工作在引擎盖下。因为每个模块 运行s 在它自己的进程中,它会有它自己的线程池,不与其他模块共享。不同进程不能共享同一个线程池。
故事的寓意是,如果不同的 Web 模块以某种方式 运行 在同一个进程中,那么理论上它们可以共享同一个线程池,但是如果每个 Web 服务器 运行 部署web 模块在它自己的进程中,那么它们不可能共享同一个线程池。
我知道网络服务器使用线程池来避免昂贵的线程创建操作。我的问题是,线程池是否共享部署在同一 Web 服务器上的不同模块?
特别是,我们部署了两个 Web 模块。仅在一个模块中定义的过滤器会设置一个线程局部变量(并且永远不会取消设置)。由于同一个线程在那里被重用,它在另一个 Web 模块中是否也可见?
谢谢
我不确定所有服务器,但在 Tomcat 的情况下,线程池是为给定端口设置的。因此,如果您的模块部署在不同的端口下,那么每个模块都将拥有单独的线程池。因此 threadLocal 仅对给定模块可见。
Tomcat 配置中的示例摘录。我猜其他服务器使用类似的方法。
这在很大程度上取决于网络服务器技术。
Node.js 例如 运行s 每个模块在它自己的单独进程中。每个进程都有一个线程 运行ning 服务器模块的 JavaScript 代码和其他节点 运行time libuv 线程在线程池中执行异步工作在引擎盖下。因为每个模块 运行s 在它自己的进程中,它会有它自己的线程池,不与其他模块共享。不同进程不能共享同一个线程池。
故事的寓意是,如果不同的 Web 模块以某种方式 运行 在同一个进程中,那么理论上它们可以共享同一个线程池,但是如果每个 Web 服务器 运行 部署web 模块在它自己的进程中,那么它们不可能共享同一个线程池。