Кот создает поток на пользователя?

Я довольно плохо знаком с веб-разработкой. Таким образом, я приношу извинения, если это - очень простой вопрос. Например, я создаю веб-приложение и развертываю его на коте. Теперь, когда многочисленные пользователи поражают веб-приложение, кот создает новый поток на пользователя? Если это так, затем я могу все еще создать потоки в своем приложении самом и ожидать, что это останется локальным для каждого пользовательского потока, созданного котом? Данные сеансового уровня остаются синхронизируемыми через потоки?

Я надеюсь, что мой вопрос имеет смысл.

20
задан user377067 4 August 2010 в 01:38
поделиться

1 ответ

Каждый запрос обрабатывается в другом потоке. Это не «поток на пользователя». Запрос - это любое взаимодействие между клиентом (веб-браузером) и сервером. Итак, вводя URL-адрес в браузере, вызывая запрос ajax, каждый из них обрабатывается в отдельном потоке.

Состояние, которое пользователь получает во время «входа в систему» ​​(это не обязательно должен быть вход как таковой; лучше сказать, что это «набор связанных запросов от одного пользователя»), удобно сохраняется в сеансе. . Вы можете использовать сеанс для хранения любых данных, которые применимы к пользователю, хотя вы должны быть осторожны, чтобы не хранить слишком много данных, потому что они съедают память. Управление сеансом требует определенного уровня навыков.

Да, вы должны быть очень осторожны, если запускаете новые темы; вы можете сломать вещи, и обычно это плохая идея. Если вам нужно сделать что-то, что займет много времени, используйте JMS для асинхронной обработки всего, что происходит. Также помните, что не все задачи, которые влияют на данные веб-приложения, должны вызываться из веб-приложения. Задача, которая ежедневно сканирует данные, может быть запущена как отдельная задача в Tomcat или вне его, т.е.вы можете написать задание, используя что-то вроде кварцевого планировщика, или даже написать отдельную программу и настроить ее для запуска в cron (однако будьте осторожны с заданием, изменяющим данные из-под вашего веб-приложения).

Если вы используете лучшие в своем классе технологии, такие как Spring и Hibernate, они обычно связывают объекты (или могут быть настроены разработчиком приложения), которые понадобятся программисту для каждого потока (с использованием Java ThreadLocal).

Это также одна из причин, по которой запуск собственных обсуждений опасен. Если вы запустите свой собственный поток, вы можете потерять ресурсы, привязанные к исходному потоку, когда запрос завершится, а это означает, что если вы попытаетесь получить доступ к этим ресурсам в своем рабочем потоке, они не будут доступны. Этот тип ошибки может быть головной болью, чтобы найти / исправить.

edit - как указал Стивен C в комментарии к другому ответу, важно отметить, что обычно Tomcat (и другие контейнеры) поддерживают пул потоков для использования. Это означает, что новый поток не обязательно создается для каждого запроса. Это означает, что каждый запрос выполняется в отдельном потоке, который может или не может быть создан или повторно использован.

37
ответ дан 30 November 2019 в 00:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: