应用服务器是否为来自同一用户的每个请求创建新线程?

时间:2013-01-21 13:58:36

标签: webserver websphere appserver

这是一个简单的场景:

用户从Web应用程序的网页触发某些操作。这个操作很重,需要一些时间。

在服务器端完成操作之前,用户触发器会使用一些不同的参数说明相同的操作。所以第二个请求的第二个操作也将开始处理。

所以在这种情况下,是否有两个不同的线程,如第一个处理第一个请求而另一个处理第二个请求?或者只是一个线程处理两个请求,第一个操作只是为了执行第二个请求而中断(未完成)?

这里我不想避免用​​户多次请求相同的操作。只是想知道它是如何工作的。

这可能是一个愚蠢的问题,但我对此并不感到困惑。而我正在发生的事情正在加剧困惑。对我来说,似乎第一次请求的操作没有完成。

这是Websphere应用服务器,如果有帮助的话。

2 个答案:

答案 0 :(得分:2)

WebSphere Web Container为所有请求使用线程池。

对于任何请求(无关紧要),从池中获取线程,处理请求,线程返回池中。

即使请求是一个接一个,也不能保证相同的线程会处理它们。

如果您发现一个请求会干扰另一个请求,则很可能是您在代码中执行的操作,而不是由于WebSphere的行为方式。

答案 1 :(得分:2)

没有。每个请求都独立于其他请求。 websphere中没有线程关联。教你自己的一个好方法是检查websphere日志。当WebSphere将记录写入其日志文件时,例如SystemOut.log等日志包含一个线程ID。以下是WebSphere日志文件中的示例记录:

[12/11/08 13:06:36:830 CST] 0000002e VirtualHost I .....

第二个字段是线程id,它是“0000002e”。因此,您可以通过这种方式关联两个不同线程处理两个请求的方式。希望对你有意义。