| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java EE (J2EE) и Spring > spring 5 reactive |
| Автор: gelo86 23.7.2017, 18:19 |
| Объясните, почему лучше использовать spring 5 reactive web.Допустим мой Tomcat имеет 100 thread'ов. Если одновременно приходит 100 request'ов, то 101 будет ждать, пока освободиться какой нибудь thread. Допустим у меня простой CRUD REST api. Блокировка будет на JDBC, но так как sql довольно тривиальный, то он покрутиться за несколько миллисекунд. Если я же использую reactive подход, то thread'ы будут освобождаться не при обработки запроса, а уже по середине на jdbc запросе, но при этом будет запущен другой thread для дальнейшей обработки запроса. Итого я буду иметь 100 thread'ов tomcat'а и 100 других thread'ов. Создание и management thread'ов тоже стоит ресурсов. Окупается ли дополнительная затрата времени на создание thread'ов? |
| Автор: LSD 24.7.2017, 18:23 |
| Ну на самом деле 100 тредов, это весьма серьезная нагрузка на сервер. Но проблема в другом, если на каждый запрос выделять отдельный тред, то по мере роста нагрузки сервер захлебнется. Пусть у тебя мощный сервер и 100 тредов он тянет, на 200 начнет затыкаться, а на 300 умрет. 1. Каждый тред потребляет память и немало. 2. Переключение контекста требует времени и не мало. Эффективно распаралелить 100 тредов уже непросто, а 300 невозможно. В реактивном подходе количество потоков фиксированно, и сервер может эффективно ими управлять. Т.е. мы получаем от сервера максимальную производительность на которую способно железо (ну понятно, что там надо еще правильно подобрать количество тредов, убедится что база не узкое место и т.д.). |
| Автор: gelo86 21.8.2017, 14:20 |
| Логично бы было использовать MongoDD вместо PostgreSQL для проекта похожего на avito.ru? Как понимаю, mongo driver является async, что очень вписывается в reactive spring? |