powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Многопоточность внутри сервлетов. Помогите что использовать
25 сообщений из 53, страница 1 из 3
Многопоточность внутри сервлетов. Помогите что использовать
    #39064747
sce
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет, подскажите какой подход будет правильным

Есть сервлет который возвращает некоторый общий результат проверок. При вызове сервлета, сервлет делает много последовательных проверок которые занимают определенное время не зависящее от сервлета (для примера дожидается ответа от другого сервера).

Я хочу сделать чтобы все проверки были параллельными, тем самым уменьшив общее время проверки. Т.е сделать многопоточность внутри сервлета.

Посоветуйте как лучше поступить с такой задачей? Что использовать и т.д? Вообще это правильный подход или нет.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39064793
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sceВсем привет, подскажите какой подход будет правильным

Есть сервлет который возвращает некоторый общий результат проверок. При вызове сервлета, сервлет делает много последовательных проверок которые занимают определенное время не зависящее от сервлета (для примера дожидается ответа от другого сервера).

Я хочу сделать чтобы все проверки были параллельными, тем самым уменьшив общее время проверки. Т.е сделать многопоточность внутри сервлета.

Посоветуйте как лучше поступить с такой задачей? Что использовать и т.д? Вообще это правильный подход или нет.

Подход нормальный.
Можно воспользоваться стандартным механизмом создания потоков и в них делать проверку.
Можно воспользоваться EJB-ным асинхронным вызовом ч/з Future.

Так или иначе придется где-то в цикле ждать, пока все проверки пройдут.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39064800
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sce,
Можно взять 4 сервлета и 4 ajax вызова. ...без потоков. Зачем ты сделал 1 тяжёлый.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39064935
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Petro123sce,
Можно взять 4 сервлета и 4 ajax вызова. ...без потоков. Зачем ты сделал 1 тяжёлый.
+1
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39064980
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulМожно воспользоваться стандартным механизмом создания потоков и в них делать проверку.

Это которым? Хочу заметить что запуск новых потоков из JEE приложения чревато утечками PermGen/Metaspace. Нужно использовать средства контейнера для того чтобы он выделял потоки под задачи приложения.

mad_nazgulМожно воспользоваться EJB-ным асинхронным вызовом ч/з Future.
Так или иначе придется где-то в цикле ждать, пока все проверки пройдут.
Можно и асинхронный сервлет прикрутить. Но мне кажется, что вынести на клиента, как посоветовал Petro123 будет проще.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065059
mad_nazgul
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczМожно и асинхронный сервлет прикрутить. Но мне кажется, что вынести на клиента, как посоветовал Petro123 будет проще.

Нет. Можно для каждой проверки делать свой асинхронный бин (@Asyncronus), который в методе возвращает Future<Чего-то там>.
В сервлете их проинжектить.
Потом в обработчике вызвать.
А после в цикле проверять .isDone() у Future<Чего-то там>.

Это если решать "в лоб".

А так да, можно воспользоваться асинхронностью на клиенте.
Только потом калбекам собирать все проверки я себе не представляю.
Особенно если одна проверка будет несколько миллисекунд, а другая несколько секунд.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065072
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczЭто которым? Хочу заметить что запуск новых потоков из JEE приложения чревато утечками PermGen/Metaspace. Нужно использовать средства контейнера для того чтобы он выделял потоки под задачи приложения.

Можете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск?
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065083
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmBlazkowiczЭто которым? Хочу заметить что запуск новых потоков из JEE приложения чревато утечками PermGen/Metaspace. Нужно использовать средства контейнера для того чтобы он выделял потоки под задачи приложения.

Можете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск?

если вызывать shutdown то риска нет. Проблемы происходят только если запускать через Thread.start или когда забыли закрыть exsecutor
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065098
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065104
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmМожете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск?
Возможно когда-нибудь исправят, но, как минимум в 7ке, если ты запускаешь новый поток, то ссылка на его context classloader оседает где-то во внутренностях Java и этот ClassLoader в JEE контейнере больше не соберется.
Проблема не решается даже если поток завершен и свободен для GC. Можно обойти подменой ClassLoader-а перед запуском потока.

Но правильнее использовать средства контейнера, и потоки порожденные им.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065105
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никесли вызывать shutdown то риска нет. Проблемы происходят только если запускать через Thread.start или когда забыли закрыть exsecutor
Нет, shutdown не решает проблемы:
http://rsdn.ru/forum/java/5974292.1
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065112
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
rdmзабыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает.
Это странный какой-то пассаж. Много ли библиотек плодят потоки? Я знаю парочку. И при их использовании всегда происходит утечка в permgen, и пользователи просят разработчиков таки добавить статические методы для того чтобы пришивать эти потоки и освобождать связанные с ними ресурсы.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065114
twr143
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sce,

создайте четыре очереди и используйте механизм поллинга из веб модуля приложения для периодического запроса итогов работы этих очередей.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065143
Фотография Petro123
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mad_nazgulТолько потом калбекам собирать все проверки я себе не представляю.
Особенно если одна проверка будет несколько миллисекунд, а другая несколько секунд.
как обычно. В свете новых веяний в архитектуре назовём их микросервисы))).
И назначим обработчик-функцию на событие "Пришёл ответ")).
Если это JS то там тоже это всё есть.
Можно сервлет и из Java вызвать.
..
Веб решения Уже говорят что длинного ничего не должно быть.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065157
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
twr143создайте четыре очереди и используйте механизм поллинга из веб модуля приложения для периодического запроса итогов работы этих очередей.
Тоже здравая мысль, только снова нужен полноценный JEE контейнер, или встраивать MQ самому.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065471
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczзабыл никесли вызывать shutdown то риска нет. Проблемы происходят только если запускать через Thread.start или когда забыли закрыть exsecutor
Нет, shutdown не решает проблемы:
http://rsdn.ru/forum/java/5974292.1

Вообще если честно, то это очень странно. Пару лет назад помогал одному немцу допилить его библиотечку по определению и исправлению мемори ликов, с тех пор постоянно использую у себя и никогда не возникало проблем с executor.
Вот кстати любопытное чтиво с его блога - http://java.jiderhamn.se/2012/02/26/classloader-leaks-v-common-mistakes-and-known-offenders/

авторзабыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает.

Ох, как вы заблуждаетесь:) Библиотекикорректно работающие с потоками - скорее исключение, прочитайте приведенную выше ссылку.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065476
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczrdmМожете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск?
Возможно когда-нибудь исправят, но, как минимум в 7ке, если ты запускаешь новый поток, то ссылка на его context classloader оседает где-то во внутренностях Java и этот ClassLoader в JEE контейнере больше не соберется.
Проблема не решается даже если поток завершен и свободен для GC. Можно обойти подменой ClassLoader-а перед запуском потока.

Но правильнее использовать средства контейнера, и потоки порожденные им.

А на каком контейнере вы тестировали? У меня что на tomcat что на weblogic никогда такого чуда не вылезало. Работало месяцами, по 2-3 редеплоя в день во время активного девелопмента..
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065535
xifr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
sce,

1) Держать долгий request в сервлете не очень хорошо.
2) Плодить под каждую проверку отдельные request-ы которые тоже будут долгими, тоже не очень.
3) Плодить Thread в каждом request - можно огребсти проблемы (имхо если псих нажмёт кнопку 100 раз).

Сделай проверки, как отдельные задачи
Сделай единую очередь этих задача
Сделай единый обработчик задач (где можно сконфигурить количество Thread под конкретное железо)
По выполнению задач, записывый результаты (например в сессию или в БД)
Сделай два метода в сервелете "выполнить проверку" (создание задач с проверками)
и "проверка статуса выполнения".
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065604
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
всё это реализуется с помощью websocket
просто и красиво.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065617
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл ник, ну вот к примеру Solr (Cloud) или что-то в этом духе. Там же явно создание потоков идет.
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065618
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowiczrdmзабыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает.
Это странный какой-то пассаж. Много ли библиотек плодят потоки? Я знаю парочку. И при их использовании всегда происходит утечка в permgen, и пользователи просят разработчиков таки добавить статические методы для того чтобы пришивать эти потоки и освобождать связанные с ними ресурсы.
Серьезно?) Я думал все эти спринги и хибернейты создают потоки)
Вот Solr создает наверно, да?
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065619
rdm
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz, как в этом случае работать с кодом, который создает потоки? Как интегрировать такой код к web интерфейсу (например jetty+spring)
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065622
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никА на каком контейнере вы тестировали? У меня что на tomcat что на weblogic никогда такого чуда не вылезало. Работало месяцами, по 2-3 редеплоя в день во время активного девелопмента..
Tomcat. Я, правда, теперь сам задался вопросом, если AWS клиент запускает свой поток и спокойно останавливает и это убирает утечку, то почему же ExecutorService.shutdown() не помог? Он разве не завершает потоки?
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065623
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
забыл никА на каком контейнере вы тестировали? У меня что на tomcat что на weblogic никогда такого чуда не вылезало. Работало месяцами, по 2-3 редеплоя в день во время активного девелопмента..
Тоже Java 7 ?
...
Рейтинг: 0 / 0
Многопоточность внутри сервлетов. Помогите что использовать
    #39065651
забыл ник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczTomcat. Я, правда, теперь сам задался вопросом, если AWS клиент запускает свой поток и спокойно останавливает и это убирает утечку, то почему же ExecutorService.shutdown() не помог? Он разве не завершает потоки?
Вот..и я так думал.. У меня правда java6 была, но в моем случае shutown точно прибивал все потоки.
...
Рейтинг: 0 / 0
25 сообщений из 53, страница 1 из 3
Форумы / Java [игнор отключен] [закрыт для гостей] / Многопоточность внутри сервлетов. Помогите что использовать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]