3

Tomcat 7 で次の単純な JSP を実行しています。コンテナーには他に何もなく、web.xml もありません。ブラウザから 3 つの別々のタブ (Chrome) でURL をhttp://localhost:8090/test/test.jsp3 回続けてヒットしました。

<%@ page import="java.util.Date" %>
<%
    out.println("Hello there dude");
    System.out.println("Hello there my friend "+ new Date() +"
                "+Thread.currentThread().getName());
    try {
        Thread.sleep(5000);
    } catch(Exception e)
    {
        e.printStackTrace();
    } 
%>

`

Tomcat 7 またはその他のバージョンの Tomcat で実行すると、JSP サーブレットが複数のリクエストをブロックし、コンソールにこのような出力が表示されます。

こんにちは、私の友人 Thu Feb 02 19:31:35 MST 2012 http-bio-8090-exec-1
こんにちは、私の友人 Thu Feb 02 19:31:40 MST 2012 http-bio-8090-exec-3
こんにちは、私の友人木曜日 2 月 2 日 19:31:45 MST 2012 http-bio-8090-exec-4

時間を調べると、JSP サーブレットが連続して実行されていることがわかります。私はそれらをすべて同時に開始したので、互いに 1 秒以内に終了するはずですが、後続の要求は前の要求が完了するまで開始されません。これらは上記の開始時間であり、ブラウザは最後のリクエストで 15 秒間ハングします。シングルスレッドの動作を求めているわけではないので、仕様を理解していれば、JSP リクエストは並行して実行されるはずです。

興味深いことに、Tomcat は上記のように異なるスレッドを割り当てていますが、確実に連続して実行されています。進行中のリクエストが終了するまで、コンテナーが処理する新しい JSP サーブレット スレッドを解放しないようです。私たちは Web サービスを 1 日中実行していますが、問題なく並行して実行されているようです。

マルチコアの Windows ボックスと、200 のスレッドが利用可能なデフォルトの Tomcat 構成で実行しています。

4

1 に答える 1

3

これは、Tomcatがスレッドをブロックするのではなく、ブラウザがリクエストをブロックする場合である可能性が高いようです。Tomcat 7のインストールで同じコードを試したところ、wget localhost:8060/ThreadTest/ &3回連続して実行され、3つすべてが互いに1秒以内に終了しました。

于 2012-02-03T19:59:24.153 に答える