|
|
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Как я понял эти фичи пришли в мир сервлетов благодаря java nio. Почитав про nio ощущение сложилось следующее, что главная фича это то, что написав write/read мы не блокируемся(наверное внутри есть тред пул, куда эти задачи запихиаются и исполняются по мере возможности) вот этой картинки я не понял. По ней мы можем только из одного треда обращаться к селектору, что выглядит странно. НУ и API у этого nio максимально запутанное какое-то. Как будто пытались написать так, чтобы было непонятно. Но это ладно, это к вопросу не относится. Удобочитаемое API к NIO, говорят, это netty, на котором, как мы выяснили в соседнем топике, работает play. Теперь к вопросу: Объясните такую вещь Код: java 1. 2. 3. 4. 5. Понятно, что тред не может быть переиспользован ибо операции выполняется в одном потоке, а внутри логики может быть какое-то io, которое вообще замедлит нашу программу. Говорят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков. Как я понял статейки, что я читал в новых сервлетах будет работать типа такого: Код: java 1. 2. 3. 4. 5. 6. 7. 8. 9. Я понимаю, что скорее всего это как-то не так работает ибо то, что я написал ничего не даёт. Количество потоков будет даже больше, чем в изначальном варианте на 1(как минимум) поток. Собственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 17:03 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Смешались в кучу люди, кони.... IMHO ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 17:09 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerГоворят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков. Тут вот кстати непонтно, почему томкат не может либо расширить себе тред пул, либо ичпользовать тред пул с очередью, куда будут попадать задачи, которые приходят при заполненой очереди ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 17:10 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Решил по серверлетам 3.0 почитать, первая ссылка привела на хабр. Где говорят: 1. Появились аннотации 2. "Для поддержки длительных операций добавилась возможность асинхронной работы сервлета" Откуда топик стартер взял измышления про NIO, мне в упор не ясно. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 17:12 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerquestionerГоворят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков. Тут вот кстати непонтно, почему томкат не может либо расширить себе тред пул, либо ичпользовать тред пул с очередью, куда будут попадать задачи, которые приходят при заполненой очереди Все бредовее и бредовее. И кто Вам такое говорит? Про томкат не помню, а у апача и любых других вменяемых Web и апп серверов (Weblogic) - никаких 200 потоков нет. Их количество задается в файле конфигурации. И AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 17:18 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно. Если про это не написано на хабре, не значит, что этого нет. Я довольно много чего почитать успел, ссылку прям сразу не найти. Насчёт смешения коней и людей - согласен ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 18:08 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 18:11 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно ))) по умолчанию maxThreads=200, minSpareThreads=25 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 19:01 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerвот тут про NIO Что такое NIO знаю очень хорошо. Портировал _реальный_ проект на NIO (NIO через http://hc.apache.org/ с http://www.simpleframework.org/). Т.ч. все плюсы, минусы и глюки в относительно высоко нагруженной среде (сотни соединений, сервер 24x7 с 40 ядрами) на своей шкуре испытал ))) questionerСобственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно? Предполагаю тогда, когда нужны функции, которые появились в API 3.0. Мне кажется, это очевидно. Список фичь можно посмотреть например тут: http://www.oracle.com/technetwork/server-storage/ts-5415-159162.pdf Java™ Servlet 3.0 API: What's new and exciting Список достаточно большой, что Вам из этого не понятно - я не знаю. При чем здесь NIO, так же не понимаю. llemingпо умолчанию maxThreads=200, minSpareThreads=25 Ну то есть, как я и говорил, задается параметром. Что не устраивает ТС, мне не понятно ))) Никогда tomcat в И-нет не открывал. Как в 90-ые приучили настраивать tomcat за apache http, так и настраиваю. Хоть и не знаю /не знал/ ))), чем это правильнее, чем чистый томкат. Что в Apache HTTP, что в Weblogic кол-во worker threads явно исчисляется десятком или чуть больше. Т.к., по логике и административным документациям, кол-во одновременно работающих threads рекомендуют иметь максимум в 2-а раза большим, чем CPU. Т.ч. 200 одновременно выполняющихся тредов, это только для 100 процессорного сервера ))) или для устройства полного зависания системы в ситуации наподобие случайной DOS-атаки ))). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 02.04.2017, 21:02 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно. +1 тут закос у ТС на потоки. Они видятся везде и в любом вопросе). ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 10:01 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerКак я понял статейки, что я читал в новых сервлетах будет работать типа такого:Что за идиотская привычка читать что угодно, кроме документации ?! Асинхронное API в сервлетах это способ управления взаимодействовать с пулом потоков контейнера в условиях запрета создавать потоки в своём коде. Асинхронный ввод-вывод - способ дополнительной оптимизации асинхронного API сервлетов. Дополнительный потому, что тип коннектора вашему коду безразличен. Тип коннекторов выбирает пользователь, который развёртывает ваше приложение в своём контейнере. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 10:08 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questioner http://pro-java.ru/java-dlya-opytnyx/asinxronnye-servlety-java/ вот тут про NIO... написан всякий бред. бредятинаАсинхронные сервлеты основываются на ключевом усовершенствовании в HyperText Traпsfer Protocol (НТТР) 1.1, сделавшем возможными постоянные соединения. В НТТР 1.0 каждое соединение использовалось для отправки и получения только одной пары «запрос/ответ«; в то же время НТТР 1.1 позволяет веб-приложениям поддерживать соединение в активном состоянии и посылать множественные запросы. При стандартной реализации прикладная часть Java потребовала бы отдельного потока, постоянно прикрепленного к НТТР-соединению. Однако неблокирующее API ввода-вывода языка Java (Java Nonblocking I/O, NIO) возвращает между активными запросами потоки «в оборот» благодаря новым возможностям NIO. На сегодняшний день все совместимые со спецификациями Servlet 3.0 веб серверы имеют встроенную поддержку Java NIO. 2. Никакой из вариантов Servlet API не предоставляет доступа к нижележащему TCP-соединению. Более того, это не предусмотрено даже спецификацией HTTP-протокола; 3. Нет никаких HTTP-соединений. Есть HTTP-запросы. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 10:15 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Petro123Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно. +1 тут закос у ТС на потоки. Они видятся везде и в любом вопросе). Просветите же про связь NIO и потоков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:12 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. SidorovАсинхронное API в сервлетах это способ управления взаимодействовать с пулом потоков контейнера в условиях запрета создавать потоки в своём коде. Откуда может взяться такой запрет? То есть асинхронные сервлеты будут работать в рамках всё тех же 200 потоков? Basil A. SidorovАсинхронный ввод-вывод - способ дополнительной оптимизации асинхронного API сервлетов. Дополнительный потому, что тип коннектора вашему коду безразличен. Тип коннекторов выбирает пользователь, который развёртывает ваше приложение в своём контейнере. Что такое коннектор? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:16 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov2. Никакой из вариантов Servlet API не предоставляет доступа к нижележащему TCP-соединению. Более того, это не предусмотрено даже спецификацией HTTP-протокола; 3. Нет никаких HTTP-соединений. Есть HTTP-запросы. Как же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp. А как же веб сокеты? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:21 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerТо есть асинхронные сервлеты будут работать в рамках всё тех же 200 управляемых контейнером потоков ( а не самосделанных потоков )? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:42 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerПросветите же про связь NIO и потоков? вам 2 человека сказали, причём тут NIO и потоки? Вы опять как мантру: "ну просвятите же...." ЗЫ Код: java 1. https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3 там по ссылке есть демка приложения чата. Ставьте, изучайте, пишите. Где ваш код? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:47 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerКак же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp. А как же веб сокеты? это OFFTOP ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 11:54 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerЯ понимаю, что скорее всего это как-то не так работает ибо то, что я написал ничего не даёт. Количество потоков будет даже больше, чем в изначальном варианте на 1(как минимум) поток. Собственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно? Дает. Мы можем быстро освободить worker thread веб сервера. Позволяет на захватывать системные (веб сервера) ресурсы, которые нам не принадлежат Кроме того, не обязательно для каждого запроса порождать свой поток. Если несколько запросов может быть обработано одновременно, можно контекст запроса просто сохранить в какой ни будь коллекции и не плодить потоки. (получится или нет, зависит и от реализации Servlet API и разного шаманства) В статьях используют сочетание "долго работающий запрос", на мой взгляд, это не совсем удачно. Т.к. долго выполняющийся запрос может быть по двум причинам: 1) он просто жрет CPU и что-то считает - тут ничего не поможет ))) кроме HP Super Dom'в ))) 2) он не может обработать запрос, т.к. ждет каких-то внешних событий/ресурсов - а вот здесь, асинхронность может помочь очень сильно. IMHO & AFAIK Сам с асинхронными сервлетами не работал. Но с NIO и обычными сервлетами работал. IMHO & AFAIK ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 13:12 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Leonid Kudryavtsev2) он не может обработать запрос, т.к. ждет каких-то внешних событий/ресурсов - а вот здесь, асинхронность может помочь очень Когда мы используем асинхронные потоки какой тредпул используется для потоков воркеров? кто его менеджит? Пускай у нас 200 потоков на томкате и 500 потоков в пуле по воркеров. итого 700. Будет ли разница с вариантом если просто в томкате выделить 700 потоков? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 13:45 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerКогда мы используем асинхронные потоки какой тредпул используется для потоков воркеров? кто его менеджит? не знаю. Не использовал questionerПускай у нас 200 потоков на томкате и 500 потоков в пуле по воркеров. итого 700. Будет ли разница с вариантом если просто в томкате выделить 700 потоков? Так же не знаю. Думаю разница не сильно большая ))) Другое дело, что проблема не в потоках, а в программисте, который собирается делать такую похабень. Ну и совсем уж не ясно, зачем для такой похабени понадобились асинхронные фичи. Т.к. они и нужны IMHO , что бы кол-во потоков уменьшать (если это возможно) Если же не получается, то проще томкат/http сконфигурировать на много-много потоков и не забивать себе голову. Я бы еще, архитектурно, поделил бы задачу на два http сервера. Один обычный, один для порнографии с потоками ))) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 14:31 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerОткуда может взяться такой запрет?Оттуда. Технически вы можете создавать потоки, если контейнер не работает под диспетчером безопасности. Можете и под диспетчером, если настроите. Но, поскольку контейнер не особо в курсе вашей деятельности, вы можете с легкостью огрести проблем на ровном месте. Оно вам надо? То есть асинхронные сервлеты будут работать в рамках всё тех же 200 потоков?Дались вам эти двести потоков. Котяра с лёгкостью держит сотни-тысячи подключений. Если, конечно, вопрошающие удосужились почитать документацию. Асинхронные сервлеты позволяют уменьшить использование ресурсов в некоторых сценариях. Что такое коннектор?Вы уже реально запарили . Выбираете интересующую вас версию и читаете. Но архитектура (котяры) от версий не зависит: сервер -> движок -> коннектор -> хост -> контекст. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 14:50 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Тут можно предложить два более жизненных сценария: I 1. HTTP сервер с 10-ом или даже меньше worker threads который обрабатывает обычные/короткие http запросы 2.Длинные или "вялотекущие" HTTP запросы преобразуются в асинхронные и живут в отдельном помойке (путь даже Ваши 690 тредов). Для которых реализован свой велосипедный механизм управление. Тогда асинхронные запросы, позволяют не портить очередь обработки нормальных запросов и реализовать велосипед для "специфических" случаев. II, Например реальная задача. Сервер слушает один источник данных (биржа), откуда приходят котировки (за бабло). У сервера есть свои клиенты-подписчики (несколько десятков/сотня открытых соединений, на самом деле каждое соединение это отдельная подсистема у которой тысячи реальных юзеров-брокеров). В случае обычного IO, каждое соединение - поток, в котором редко-редко что ни будь происходит. Поток слушатель, при приходе новых котировок, помещает данные в очередь заинтересованных потоков-клиентов которые эти данные отсылают по сети. Потоков нужно много, сотни.. При этом потоки требуются только для поддержания IO. В случае NIO: Каждый подписчик, это просто ОБЪЕКТ s коллекции. Поток слушатель, при получение котировки, проходит по списку подписчиков и помещает данные в очередь клиента (если channel клиента в состояние suspend то он пробуждается), специальный поток ввода-вывода для всех активным channel'ов отсылает данные. Кол-во потоков исчисляется единицами. Наверное аналогично можно организовать и через асинхронные сервлеты ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 14:50 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
questionerКак же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.Ключевое слово - "обычно". Если читать спецификацию, то HTTP требует восьмибитный канал и ничего больше. При минимальных ограничениях, не нарушая ни спецификации, ни семантики, можно реализовать HTTP поверх UDP.А как же веб сокеты?А вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 14:57 |
|
||
|
Зачем нужны фичи servlet 3.0/3.1 ?
|
|||
|---|---|---|---|
|
#18+
Basil A. Sidorov]А вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат. Мне как-то кажется, что у вебсокетов вроде же свое API (в Tomcat'е), которое с subj связано совершенно опосредованно. Могу ошибаться. Читал год назад, не освоил, в проекте не использовал (руки не дошли) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 03.04.2017, 15:01 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39432069&tid=2123001]: |
0ms |
get settings: |
10ms |
get forum list: |
22ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
81ms |
get topic data: |
12ms |
get forum data: |
3ms |
get page messages: |
84ms |
get tp. blocked users: |
1ms |
| others: | 220ms |
| total: | 441ms |

| 0 / 0 |
