Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужны фичи servlet 3.0/3.1 ? / 25 сообщений из 98, страница 1 из 4
02.04.2017, 17:03
    #39431591
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Как я понял эти фичи пришли в мир сервлетов благодаря java nio.

Почитав про nio ощущение сложилось следующее, что главная фича это то, что написав write/read мы не блокируемся(наверное внутри есть тред пул, куда эти задачи запихиаются и исполняются по мере возможности)



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

НУ и API у этого nio максимально запутанное какое-то. Как будто пытались написать так, чтобы было непонятно. Но это ладно, это к вопросу не относится.

Удобочитаемое API к NIO, говорят, это netty, на котором, как мы выяснили в соседнем топике, работает play.


Теперь к вопросу:
Объясните такую вещь

Код: java
1.
2.
3.
4.
5.
doGet(....){
    
    //logic    
    //write result to response
}




Понятно, что тред не может быть переиспользован ибо операции выполняется в одном потоке, а внутри логики может быть какое-то io, которое вообще замедлит нашу программу.
Говорят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков.

Как я понял статейки, что я читал в новых сервлетах будет работать типа такого:


Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
@Autowired 
ThreadPoolExecutor executor

doGet(....){
    executor.submit( new Runnable() {
          //logic    
          //write result to response
    }
}



Я понимаю, что скорее всего это как-то не так работает ибо то, что я написал ничего не даёт.
Количество потоков будет даже больше, чем в изначальном варианте на 1(как минимум) поток.

Собственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно?
...
Рейтинг: 0 / 0
02.04.2017, 17:09
    #39431594
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Смешались в кучу люди, кони.... IMHO
...
Рейтинг: 0 / 0
02.04.2017, 17:10
    #39431595
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerГоворят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков.


Тут вот кстати непонтно, почему томкат не может либо расширить себе тред пул, либо ичпользовать тред пул с очередью, куда будут попадать задачи, которые приходят при заполненой очереди
...
Рейтинг: 0 / 0
02.04.2017, 17:12
    #39431597
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Решил по серверлетам 3.0 почитать, первая ссылка привела на хабр. Где говорят:
1. Появились аннотации
2. "Для поддержки длительных операций добавилась возможность асинхронной работы сервлета"
Откуда топик стартер взял измышления про NIO, мне в упор не ясно.
...
Рейтинг: 0 / 0
02.04.2017, 17:18
    #39431602
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerquestionerГоворят, что у томката всего 200 потоков по умолчанию и он просто будет слать нафиг клиентов если у него нет более потоков.


Тут вот кстати непонтно, почему томкат не может либо расширить себе тред пул, либо ичпользовать тред пул с очередью, куда будут попадать задачи, которые приходят при заполненой очереди
Все бредовее и бредовее. И кто Вам такое говорит?

Про томкат не помню, а у апача и любых других вменяемых Web и апп серверов (Weblogic) - никаких 200 потоков нет. Их количество задается в файле конфигурации. И AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно )))
...
Рейтинг: 0 / 0
02.04.2017, 18:08
    #39431623
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно.

Если про это не написано на хабре, не значит, что этого нет.

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

Насчёт смешения коней и людей - согласен
...
Рейтинг: 0 / 0
02.04.2017, 18:11
    #39431625
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Leonid Kudryavtsev,

http://pro-java.ru/java-dlya-opytnyx/asinxronnye-servlety-java/

вот тут про NIO
...
Рейтинг: 0 / 0
02.04.2017, 19:01
    #39431643
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Leonid Kudryavtsev AFAIK значение по умолчанию около 10-и worker threads дабы обычно больше и не нужно и вредно )))

по умолчанию maxThreads=200, minSpareThreads=25
...
Рейтинг: 0 / 0
02.04.2017, 21:02
    #39431682
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
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-атаки ))).
...
Рейтинг: 0 / 0
03.04.2017, 10:01
    #39431860
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно.
+1
тут закос у ТС на потоки.
Они видятся везде и в любом вопросе).
...
Рейтинг: 0 / 0
03.04.2017, 10:08
    #39431865
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerКак я понял статейки, что я читал в новых сервлетах будет работать типа такого:Что за идиотская привычка читать что угодно, кроме документации ?!
Асинхронное API в сервлетах это способ управления взаимодействовать с пулом потоков контейнера в условиях запрета создавать потоки в своём коде.
Асинхронный ввод-вывод - способ дополнительной оптимизации асинхронного API сервлетов. Дополнительный потому, что тип коннектора вашему коду безразличен. Тип коннекторов выбирает пользователь, который развёртывает ваше приложение в своём контейнере.
...
Рейтинг: 0 / 0
03.04.2017, 10:15
    #39431870
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
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.
1. Нет ни малейшей связи между постоянными соединениями и асинхронными сервлетами;
2. Никакой из вариантов Servlet API не предоставляет доступа к нижележащему TCP-соединению. Более того, это не предусмотрено даже спецификацией HTTP-протокола;
3. Нет никаких HTTP-соединений. Есть HTTP-запросы.
...
Рейтинг: 0 / 0
03.04.2017, 11:12
    #39431895
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Petro123Leonid KudryavtsevОткуда топик стартер взял измышления про NIO, мне в упор не ясно.
+1
тут закос у ТС на потоки.
Они видятся везде и в любом вопросе).

Просветите же про связь NIO и потоков?
...
Рейтинг: 0 / 0
03.04.2017, 11:16
    #39431899
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Basil A. SidorovАсинхронное API в сервлетах это способ управления взаимодействовать с пулом потоков контейнера в условиях запрета создавать потоки в своём коде.

Откуда может взяться такой запрет?
То есть асинхронные сервлеты будут работать в рамках всё тех же 200 потоков?

Basil A. SidorovАсинхронный ввод-вывод - способ дополнительной оптимизации асинхронного API сервлетов. Дополнительный потому, что тип коннектора вашему коду безразличен. Тип коннекторов выбирает пользователь, который развёртывает ваше приложение в своём контейнере.

Что такое коннектор?
...
Рейтинг: 0 / 0
03.04.2017, 11:21
    #39431900
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Basil A. Sidorov2. Никакой из вариантов Servlet API не предоставляет доступа к нижележащему TCP-соединению. Более того, это не предусмотрено даже спецификацией HTTP-протокола;
3. Нет никаких HTTP-соединений. Есть HTTP-запросы.

Как же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.

А как же веб сокеты?
...
Рейтинг: 0 / 0
03.04.2017, 11:42
    #39431905
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerТо есть асинхронные сервлеты будут работать в рамках всё тех же 200 управляемых контейнером потоков ( а не самосделанных потоков )?
...
Рейтинг: 0 / 0
03.04.2017, 11:47
    #39431909
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerПросветите же про связь NIO и потоков?
вам 2 человека сказали, причём тут NIO и потоки?
Вы опять как мантру: "ну просвятите же...."
ЗЫ
Код: java
1.
@WebServlet(url="/foo" asyncSupported=true)


https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3
там по ссылке есть демка приложения чата.
Ставьте, изучайте, пишите. Где ваш код?
...
Рейтинг: 0 / 0
03.04.2017, 11:54
    #39431915
Petro123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerКак же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.
А как же веб сокеты?
это OFFTOP
...
Рейтинг: 0 / 0
03.04.2017, 13:12
    #39431977
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerЯ понимаю, что скорее всего это как-то не так работает ибо то, что я написал ничего не даёт.
Количество потоков будет даже больше, чем в изначальном варианте на 1(как минимум) поток.

Собственно в чем преимущество от сервлелов 3.0? когда их нужно использовать и когда не нужно?
Дает. Мы можем быстро освободить worker thread веб сервера.
Позволяет на захватывать системные (веб сервера) ресурсы, которые нам не принадлежат

Кроме того, не обязательно для каждого запроса порождать свой поток. Если несколько запросов может быть обработано одновременно, можно контекст запроса просто сохранить в какой ни будь коллекции и не плодить потоки. (получится или нет, зависит и от реализации Servlet API и разного шаманства)

В статьях используют сочетание "долго работающий запрос", на мой взгляд, это не совсем удачно. Т.к. долго выполняющийся запрос может быть по двум причинам:
1) он просто жрет CPU и что-то считает - тут ничего не поможет ))) кроме HP Super Dom'в )))
2) он не может обработать запрос, т.к. ждет каких-то внешних событий/ресурсов - а вот здесь, асинхронность может помочь очень сильно. IMHO & AFAIK

Сам с асинхронными сервлетами не работал. Но с NIO и обычными сервлетами работал.
IMHO & AFAIK
...
Рейтинг: 0 / 0
03.04.2017, 13:45
    #39432000
questioner
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Leonid Kudryavtsev2) он не может обработать запрос, т.к. ждет каких-то внешних событий/ресурсов - а вот здесь, асинхронность может помочь очень

Когда мы используем асинхронные потоки какой тредпул используется для потоков воркеров? кто его менеджит?

Пускай у нас 200 потоков на томкате и 500 потоков в пуле по воркеров.


итого 700.

Будет ли разница с вариантом если просто в томкате выделить 700 потоков?
...
Рейтинг: 0 / 0
03.04.2017, 14:31
    #39432050
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerКогда мы используем асинхронные потоки какой тредпул используется для потоков воркеров? кто его менеджит?

не знаю. Не использовал

questionerПускай у нас 200 потоков на томкате и 500 потоков в пуле по воркеров.
итого 700.
Будет ли разница с вариантом если просто в томкате выделить 700 потоков?
Так же не знаю. Думаю разница не сильно большая )))

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

Если же не получается, то проще томкат/http сконфигурировать на много-много потоков и не забивать себе голову. Я бы еще, архитектурно, поделил бы задачу на два http сервера. Один обычный, один для порнографии с потоками )))
...
Рейтинг: 0 / 0
03.04.2017, 14:50
    #39432069
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerОткуда может взяться такой запрет?Оттуда.
Технически вы можете создавать потоки, если контейнер не работает под диспетчером безопасности. Можете и под диспетчером, если настроите. Но, поскольку контейнер не особо в курсе вашей деятельности, вы можете с легкостью огрести проблем на ровном месте. Оно вам надо?
То есть асинхронные сервлеты будут работать в рамках всё тех же 200 потоков?Дались вам эти двести потоков. Котяра с лёгкостью держит сотни-тысячи подключений. Если, конечно, вопрошающие удосужились почитать документацию.
Асинхронные сервлеты позволяют уменьшить использование ресурсов в некоторых сценариях.
Что такое коннектор?Вы уже реально запарили . Выбираете интересующую вас версию и читаете.
Но архитектура (котяры) от версий не зависит: сервер -> движок -> коннектор -> хост -> контекст.
...
Рейтинг: 0 / 0
03.04.2017, 14:50
    #39432070
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Тут можно предложить два более жизненных сценария:

I

1. HTTP сервер с 10-ом или даже меньше worker threads который обрабатывает обычные/короткие http запросы
2.Длинные или "вялотекущие" HTTP запросы преобразуются в асинхронные и живут в отдельном помойке (путь даже Ваши 690 тредов). Для которых реализован свой велосипедный механизм управление.
Тогда асинхронные запросы, позволяют не портить очередь обработки нормальных запросов и реализовать велосипед для "специфических" случаев.

II,
Например реальная задача. Сервер слушает один источник данных (биржа), откуда приходят котировки (за бабло). У сервера есть свои клиенты-подписчики (несколько десятков/сотня открытых соединений, на самом деле каждое соединение это отдельная подсистема у которой тысячи реальных юзеров-брокеров).

В случае обычного IO, каждое соединение - поток, в котором редко-редко что ни будь происходит. Поток слушатель, при приходе новых котировок, помещает данные в очередь заинтересованных потоков-клиентов которые эти данные отсылают по сети. Потоков нужно много, сотни.. При этом потоки требуются только для поддержания IO.

В случае NIO:
Каждый подписчик, это просто ОБЪЕКТ s коллекции. Поток слушатель, при получение котировки, проходит по списку подписчиков и помещает данные в очередь клиента (если channel клиента в состояние suspend то он пробуждается), специальный поток ввода-вывода для всех активным channel'ов отсылает данные. Кол-во потоков исчисляется единицами.

Наверное аналогично можно организовать и через асинхронные сервлеты
...
Рейтинг: 0 / 0
03.04.2017, 14:57
    #39432079
Basil A. Sidorov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
questionerКак же нет соединений? tcp это ведь уже какое-никакое соединение, а http идёт обычно над tcp.Ключевое слово - "обычно". Если читать спецификацию, то HTTP требует восьмибитный канал и ничего больше.
При минимальных ограничениях, не нарушая ни спецификации, ни семантики, можно реализовать HTTP поверх UDP.А как же веб сокеты?А вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат.
...
Рейтинг: 0 / 0
03.04.2017, 15:01
    #39432084
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Зачем нужны фичи servlet 3.0/3.1 ?
Basil A. Sidorov]А вебсокеты - изврат, который получается у программистов, не читающих спецификацию. Это работающий изврат, но изврат.
Мне как-то кажется, что у вебсокетов вроде же свое API (в Tomcat'е), которое с subj связано совершенно опосредованно.

Могу ошибаться. Читал год назад, не освоил, в проекте не использовал (руки не дошли)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Зачем нужны фичи servlet 3.0/3.1 ? / 25 сообщений из 98, страница 1 из 4
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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