|
|
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
Всем привет, подскажите какой подход будет правильным Есть сервлет который возвращает некоторый общий результат проверок. При вызове сервлета, сервлет делает много последовательных проверок которые занимают определенное время не зависящее от сервлета (для примера дожидается ответа от другого сервера). Я хочу сделать чтобы все проверки были параллельными, тем самым уменьшив общее время проверки. Т.е сделать многопоточность внутри сервлета. Посоветуйте как лучше поступить с такой задачей? Что использовать и т.д? Вообще это правильный подход или нет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 00:08 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
sceВсем привет, подскажите какой подход будет правильным Есть сервлет который возвращает некоторый общий результат проверок. При вызове сервлета, сервлет делает много последовательных проверок которые занимают определенное время не зависящее от сервлета (для примера дожидается ответа от другого сервера). Я хочу сделать чтобы все проверки были параллельными, тем самым уменьшив общее время проверки. Т.е сделать многопоточность внутри сервлета. Посоветуйте как лучше поступить с такой задачей? Что использовать и т.д? Вообще это правильный подход или нет. Подход нормальный. Можно воспользоваться стандартным механизмом создания потоков и в них делать проверку. Можно воспользоваться EJB-ным асинхронным вызовом ч/з Future. Так или иначе придется где-то в цикле ждать, пока все проверки пройдут. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 07:11 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
sce, Можно взять 4 сервлета и 4 ajax вызова. ...без потоков. Зачем ты сделал 1 тяжёлый. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 07:34 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
Petro123sce, Можно взять 4 сервлета и 4 ajax вызова. ...без потоков. Зачем ты сделал 1 тяжёлый. +1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 10:45 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
mad_nazgulМожно воспользоваться стандартным механизмом создания потоков и в них делать проверку. Это которым? Хочу заметить что запуск новых потоков из JEE приложения чревато утечками PermGen/Metaspace. Нужно использовать средства контейнера для того чтобы он выделял потоки под задачи приложения. mad_nazgulМожно воспользоваться EJB-ным асинхронным вызовом ч/з Future. Так или иначе придется где-то в цикле ждать, пока все проверки пройдут. Можно и асинхронный сервлет прикрутить. Но мне кажется, что вынести на клиента, как посоветовал Petro123 будет проще. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 11:16 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
BlazkowiczМожно и асинхронный сервлет прикрутить. Но мне кажется, что вынести на клиента, как посоветовал Petro123 будет проще. Нет. Можно для каждой проверки делать свой асинхронный бин (@Asyncronus), который в методе возвращает Future<Чего-то там>. В сервлете их проинжектить. Потом в обработчике вызвать. А после в цикле проверять .isDone() у Future<Чего-то там>. Это если решать "в лоб". А так да, можно воспользоваться асинхронностью на клиенте. Только потом калбекам собирать все проверки я себе не представляю. Особенно если одна проверка будет несколько миллисекунд, а другая несколько секунд. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 12:34 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
BlazkowiczЭто которым? Хочу заметить что запуск новых потоков из JEE приложения чревато утечками PermGen/Metaspace. Нужно использовать средства контейнера для того чтобы он выделял потоки под задачи приложения. Можете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 12:42 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
rdmBlazkowiczЭто которым? Хочу заметить что запуск новых потоков из JEE приложения чревато утечками PermGen/Metaspace. Нужно использовать средства контейнера для того чтобы он выделял потоки под задачи приложения. Можете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск? если вызывать shutdown то риска нет. Проблемы происходят только если запускать через Thread.start или когда забыли закрыть exsecutor ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 12:50 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
забыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:02 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
rdmМожете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск? Возможно когда-нибудь исправят, но, как минимум в 7ке, если ты запускаешь новый поток, то ссылка на его context classloader оседает где-то во внутренностях Java и этот ClassLoader в JEE контейнере больше не соберется. Проблема не решается даже если поток завершен и свободен для GC. Можно обойти подменой ClassLoader-а перед запуском потока. Но правильнее использовать средства контейнера, и потоки порожденные им. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:09 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
забыл никесли вызывать shutdown то риска нет. Проблемы происходят только если запускать через Thread.start или когда забыли закрыть exsecutor Нет, shutdown не решает проблемы: http://rsdn.ru/forum/java/5974292.1 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:11 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
rdmзабыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает. Это странный какой-то пассаж. Много ли библиотек плодят потоки? Я знаю парочку. И при их использовании всегда происходит утечка в permgen, и пользователи просят разработчиков таки добавить статические методы для того чтобы пришивать эти потоки и освобождать связанные с ними ресурсы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:15 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
sce, создайте четыре очереди и используйте механизм поллинга из веб модуля приложения для периодического запроса итогов работы этих очередей. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:15 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
mad_nazgulТолько потом калбекам собирать все проверки я себе не представляю. Особенно если одна проверка будет несколько миллисекунд, а другая несколько секунд. как обычно. В свете новых веяний в архитектуре назовём их микросервисы))). И назначим обработчик-функцию на событие "Пришёл ответ")). Если это JS то там тоже это всё есть. Можно сервлет и из Java вызвать. .. Веб решения Уже говорят что длинного ничего не должно быть. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:37 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
twr143создайте четыре очереди и используйте механизм поллинга из веб модуля приложения для периодического запроса итогов работы этих очередей. Тоже здравая мысль, только снова нужен полноценный JEE контейнер, или встраивать MQ самому. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 13:48 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
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/ авторзабыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает. Ох, как вы заблуждаетесь:) Библиотекикорректно работающие с потоками - скорее исключение, прочитайте приведенную выше ссылку. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 17:24 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
BlazkowiczrdmМожете уточнить в каких случаях? Если использовать executor и все правильно завершать, то есть риск? Возможно когда-нибудь исправят, но, как минимум в 7ке, если ты запускаешь новый поток, то ссылка на его context classloader оседает где-то во внутренностях Java и этот ClassLoader в JEE контейнере больше не соберется. Проблема не решается даже если поток завершен и свободен для GC. Можно обойти подменой ClassLoader-а перед запуском потока. Но правильнее использовать средства контейнера, и потоки порожденные им. А на каком контейнере вы тестировали? У меня что на tomcat что на weblogic никогда такого чуда не вылезало. Работало месяцами, по 2-3 редеплоя в день во время активного девелопмента.. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 17:28 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
sce, 1) Держать долгий request в сервлете не очень хорошо. 2) Плодить под каждую проверку отдельные request-ы которые тоже будут долгими, тоже не очень. 3) Плодить Thread в каждом request - можно огребсти проблемы (имхо если псих нажмёт кнопку 100 раз). Сделай проверки, как отдельные задачи Сделай единую очередь этих задача Сделай единый обработчик задач (где можно сконфигурить количество Thread под конкретное железо) По выполнению задач, записывый результаты (например в сессию или в БД) Сделай два метода в сервелете "выполнить проверку" (создание задач с проверками) и "проверка статуса выполнения". ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 18:25 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
всё это реализуется с помощью websocket просто и красиво. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 19:51 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
забыл ник, ну вот к примеру Solr (Cloud) или что-то в этом духе. Там же явно создание потоков идет. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 20:10 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
Blazkowiczrdmзабыл ник, почти все известные библиотеки работая в контейнере внутри используют многопоточностьи проблем вроде бы не возникает. Это странный какой-то пассаж. Много ли библиотек плодят потоки? Я знаю парочку. И при их использовании всегда происходит утечка в permgen, и пользователи просят разработчиков таки добавить статические методы для того чтобы пришивать эти потоки и освобождать связанные с ними ресурсы. Серьезно?) Я думал все эти спринги и хибернейты создают потоки) Вот Solr создает наверно, да? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 20:12 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
Blazkowicz, как в этом случае работать с кодом, который создает потоки? Как интегрировать такой код к web интерфейсу (например jetty+spring) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 20:13 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
забыл никА на каком контейнере вы тестировали? У меня что на tomcat что на weblogic никогда такого чуда не вылезало. Работало месяцами, по 2-3 редеплоя в день во время активного девелопмента.. Tomcat. Я, правда, теперь сам задался вопросом, если AWS клиент запускает свой поток и спокойно останавливает и это убирает утечку, то почему же ExecutorService.shutdown() не помог? Он разве не завершает потоки? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 20:36 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
забыл никА на каком контейнере вы тестировали? У меня что на tomcat что на weblogic никогда такого чуда не вылезало. Работало месяцами, по 2-3 редеплоя в день во время активного девелопмента.. Тоже Java 7 ? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 20:37 |
|
||
|
Многопоточность внутри сервлетов. Помогите что использовать
|
|||
|---|---|---|---|
|
#18+
BlazkowiczTomcat. Я, правда, теперь сам задался вопросом, если AWS клиент запускает свой поток и спокойно останавливает и это убирает утечку, то почему же ExecutorService.shutdown() не помог? Он разве не завершает потоки? Вот..и я так думал.. У меня правда java6 была, но в моем случае shutown точно прибивал все потоки. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.09.2015, 22:25 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39065114&tid=2124867]: |
0ms |
get settings: |
8ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
171ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
81ms |
get tp. blocked users: |
2ms |
| others: | 209ms |
| total: | 508ms |

| 0 / 0 |
