Size: a a a

JPoint, Java-конференция

2018 April 18

SB

Sergey Bezrukov in JPoint, Java-конференция
Так понятно, спасибо.  Т.е. какие-нибудь green threads (вроде проект называется сейчас Fiber) решили бы проблему?
источник

AT

Alexey Tomin in JPoint, Java-конференция
Будут- посмотрим.
источник

DB

Dmitry Bohdanov in JPoint, Java-конференция
Sergey Bezrukov
Так понятно, спасибо.  Т.е. какие-нибудь green threads (вроде проект называется сейчас Fiber) решили бы проблему?
В любом случае если операция блокирующая то любые потоки будут ждать. Тут именно нужен API который позволял бы отправить запрос, получить Future, а потом прочитать ответ когда нужен.
источник

SB

Sergey Bezrukov in JPoint, Java-конференция
А когда он нужен? Обычно он нужен прямо сейчас
источник

T

Tagir in JPoint, Java-конференция
Бывает несколько независимых бэкендов, можно ко всем послать запрос сразу и дождаться всех результатов
источник

DB

Dmitry Bohdanov in JPoint, Java-конференция
Если же я не запрашивают что-то большое.  Например экспорт большого набора данных. Конечно тут курсор помогает. Но все равно вычисления такого запроса может занять несколько секунд даже по хорошо оптимизированного запроса и проиндексировых данных. В этом случае именно такие запросы могут занять весь пул и маленьким запросам не останется соединений
источник

T

Tagir in JPoint, Java-конференция
С синхронным апи вы так вообще не сделаете. Разве что по треду на каждый запрос руками создавать
источник

SB

Sergey Bezrukov in JPoint, Java-конференция
Tagir
С синхронным апи вы так вообще не сделаете. Разве что по треду на каждый запрос руками создавать
Ну, так и делаем, если нагрузка позволяет. В большинстве enterprise приложений позволяет.
источник

DB

Dmitry Bohdanov in JPoint, Java-конференция
Tagir
С синхронным апи вы так вообще не сделаете. Разве что по треду на каждый запрос руками создавать
Ну сам не создаю, а вот connection pool создает по потоку на каждое соединение
источник

T

Tagir in JPoint, Java-конференция
Как это в коде выглядит?
источник

T

Tagir in JPoint, Java-конференция
Пусть есть два бэкенда с синхронным апи b1.get() и b2.get(). Как вы их запросите одновременно?
источник

SB

Sergey Bezrukov in JPoint, Java-конференция
Через ExecutorService, туда Callable<MyResult>, оттуда рез-т.
источник

SB

Sergey Bezrukov in JPoint, Java-конференция
При умеренных нагрузках это отлично работает, когда нужно просто уменьшить время отклика, запустив параллельные запросы в разные системы
источник

OA

Oleg Anastasjev in JPoint, Java-конференция
Стоит отметить, что у асинхронности есть своя цена:
1. Код сильно усложняется. ТО что раньше было простым агоритмом станивится макаронами из очередей воткнутых друг в друга. Отлаживать проблемы в таком коде становится (значительно) сложнее.
2. Задержка ответа деградирует, иногда в сильно широких пределах.  Соотвественно если пределы ограничены, ( как например стандартное веб приложение с пользователем, АПИ для мобилки итп). То стоит подумать, насколько решаемая асинхронностью проблема реальна.  Борьда с такими задержками  требует непосредственных усилий разработчика, часто уже после отказов и инцидентов
источник

DB

Dmitry Bohdanov in JPoint, Java-конференция
Sergey Bezrukov
Через ExecutorService, туда Callable<MyResult>, оттуда рез-т.
Ну в этом случае мы переносим блокировку из основного потока в другой поток. Но получаем то же
источник

J🎩

JBaruch 🎩 in JPoint, Java-конференция
почитал фитбэк, отзывы - огонь!
источник

DS

Dmitriy Startsev in JPoint, Java-конференция
в js как-то научились сворачивать асинхронные стек трейсы и делать их читаемыми, нужно что-то подобное для корутин
источник

DS

Dmitriy Startsev in JPoint, Java-конференция
иначе отладка будет адом
источник

OY

Oleg Yakovenko in JPoint, Java-конференция
Dmitriy Startsev
в js как-то научились сворачивать асинхронные стек трейсы и делать их читаемыми, нужно что-то подобное для корутин
Дмитрий, о чем вы? О клиентском или серверном js?
источник

SB

Sergey Bezrukov in JPoint, Java-конференция
Dmitry Bohdanov
Ну в этом случае мы переносим блокировку из основного потока в другой поток. Но получаем то же
Вопрос Тагира, как я его понял, был в том как мы без асинхронности одновременно опрашиваем несколько бэкендов, если нам для ответа нужны результаты от них всех.  Понятно, что ExecutorService породит дополнительные потоки и в них будут блокировки.  А мы в основном потоке будем ждать завершения тасков. Тем не менее - при умеренных нагрузках в реальных проектах этот подход отлично работает уже много лет.
источник