Потоки, созданные в Tomcat - PullRequest
4 голосов
/ 23 мая 2011

У меня есть основной вопрос по созданию потоков Tomcat. Каждый экземпляр браузера работает в одном потоке или порождает несколько потоков для обработки одного запроса экземпляра браузера?

Я беру ссылку на текущий поток в коде и вызываю метод activecount, и он показывает 20, что указывает на 20 активных потоков. Поэтому я сомневаюсь, откуда это значение настроено. Есть ли параметр для установки активных потоков в

while (iter.hasNext()) {
  GrammarSection agrammarSection= null;
  try {
    agrammarSection = (GrammarSection) iter.next();
  } catch (Exception e) {
    System.out.println("DDD if it come in exception "+Thread.currentThread());
    System.out.println("DDD if it come in exception "+Thread.activeCount()); //IT PRINTS 20

Ответы [ 4 ]

2 голосов
/ 23 мая 2011

Tomcat создает пул потоков.Обычно один HTTP-запрос обслуживается одним потоком.

1 голос
/ 12 декабря 2011

В общем, это действительно не так.

Многие в обсуждении здесь говорили, что 1 HTTP-запрос будет обслуживаться 1 потоком Tomcat.Но вы не должны думать, что 1 страница вызовет только 1 HTTP-запрос.

По крайней мере, это зависит от того, какой браузер вы используете, сколько ресурсов на 1 странице и задействован ли AJAX, поддерживают соединения.

(1) Один экземпляр браузера создаст несколько потоков на стороне браузера / клиента для загрузки ресурсов для одной страницы и будет занимать несколько потоков в Tomcat / Apache / Weblogic / Websphere / в любом приложении, которое вы используете.,Это связано с характером современного многопоточного браузера.Если вы действительно говорите о простой HTML-странице, она может создать только 1 (рабочий) поток в Tomcat, но когда вы добавляете на страницу другие ресурсы, такие как изображения, изображения могут (и, скорее всего) будут загружаться вместе сстр.Браузер обычно не ждет, пока загрузится вся страница, прежде чем загружать изображения.Это ясно видно при использовании таких инструментов, как FireBug (в разделе «Сеть»).Страницы не загружаются последовательно.

(2) В приложении AJAX одна страница также запускает несколько потоков на серверах.

(3) Примите также во внимание, что протокол HTTP 1.1 (если вы все еще не используете HTTP 1.0) будет удерживать соединение до истечения времени ожидания HTTP.По умолчанию соединение не закрывается.Вам нужно посмотреть на параметр Keep-Alive в настройках Tomcat / WAR.Возможно, вам придется добавить обратный прокси (например, Apache, nginx, Squid, Varnish) перед Tomcat, чтобы разгрузить некоторые из этих соединений с поддержкой активности.

1 голос
/ 23 мая 2011

Tomcat использует пул потоков, см. Эту ссылку для краткого обзора конфигурации:

Поведение Tomcat Connector по умолчанию

В ответ на «Каждый экземпляр браузера»работать в одном потоке?ответ «зависит»:

Один HTTP-запрос, который возвращает текст и т. д., будет занимать один поток акцептора.

Однако, если ваша отображаемая страница также содержит изображения (на том же экземпляре сервера) или использует фреймы, браузер также будет запрашивать их (поскольку каждое изображение / страница потребует другой HTTP-запрос к серверу).).

И ... вышесказанное относится к потокам коннектора HTTP.Конечно, вы можете иметь многопоточный сервлет (для выполнения произвольной задачи).Это не будет учитываться при ограничении «maxThreads», показанном в приведенной выше конфигурации, но будет отображаться как активные потоки в JVM.

1 голос
/ 23 мая 2011

Tomcat (и большинство контейнеров сервлетов) используют пулы потоков. То есть - они предварительно инициализируют настраиваемое количество потоков, и всякий раз, когда запрос поступает на сервер, поток берется из пула и назначается для обработки запроса.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...