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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

создайте четыре очереди и используйте механизм поллинга из веб модуля приложения для периодического запроса итогов работы этих очередей.
...
Рейтинг: 0 / 0
30.09.2015, 13:37
    #39065143
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточность внутри сервлетов. Помогите что использовать
mad_nazgulТолько потом калбекам собирать все проверки я себе не представляю.
Особенно если одна проверка будет несколько миллисекунд, а другая несколько секунд.
как обычно. В свете новых веяний в архитектуре назовём их микросервисы))).
И назначим обработчик-функцию на событие "Пришёл ответ")).
Если это JS то там тоже это всё есть.
Можно сервлет и из Java вызвать.
..
Веб решения Уже говорят что длинного ничего не должно быть.
...
Рейтинг: 0 / 0
30.09.2015, 13:48
    #39065157
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточность внутри сервлетов. Помогите что использовать
twr143создайте четыре очереди и используйте механизм поллинга из веб модуля приложения для периодического запроса итогов работы этих очередей.
Тоже здравая мысль, только снова нужен полноценный JEE контейнер, или встраивать MQ самому.
...
Рейтинг: 0 / 0
30.09.2015, 17:24
    #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
30.09.2015, 17:28
    #39065476
забыл ник
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Многопоточность внутри сервлетов. Помогите что использовать
BlazkowiczrdmМожете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск?
Возможно когда-нибудь исправят, но, как минимум в 7ке, если ты запускаешь новый поток, то ссылка на его context classloader оседает где-то во внутренностях Java и этот ClassLoader в JEE контейнере больше не соберется.
Проблема не решается даже если поток завершен и свободен для GC. Можно обойти подменой ClassLoader-а перед запуском потока.

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

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

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

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


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