Pull to refresh

Comments 11

Стоимость потоков в Java

В java 21 появились виртуальные потоки и все описанное тут становится не совсем актуально. Как и использование реактивщины только для того, чтобы получить неблокирующее API.

а в чем потеря актуальности ?

если (когда) реактивный подход станет использовать виртуальные потоки, то, как мне это видится, получит дополнительные преференции в качестве увеличения производительности и сокращения потребления памяти на выделение потоков, я конечно, могу ошибаться в своих предположениях

а в чем потеря актуальности ?

Я писал конкретно про раздел "Стоимость потоков в Java". Там написано вот такое, например:

Количество потоков ограничивается возможностями системы, поскольку потоки Java соответствуют системным потокам

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

как мне это видится, получит дополнительные преференции в качестве увеличения производительности

Думаю, что чего-то сильно полезного не получит. Это две технологии примерно про одно и то же. Просто Project Reactor появился раньше, и был реализован на более высоком уровне, ну и с back pressure и реактивными манифестами. А чуть позже похожее реализовали средствами JVM. И то и другое, если не ошибаюсь, использует ForkJoinPool под капотом

Количество потоков ограничивается возможностями системы, поскольку потоки Java соответствуют системным потокам

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

что значит не так, разве что-то поменялось в том, что ОС накладывает ограничения по потокам ? вроде все так как и прежде, или мы что-то пропустили ?

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

это да, но каким образом, возможность увеличивать количество потоков может принципиально повлиять на отказ от реактивного подхода в разработке ?

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

Вы пишете что при использовании webClient нужно переключить поток на другого издателя - как это сделать?

Для этого стоит использовать .publishOn()

Но тогда следующий элемент не будет взят в обработку? Как-то можно переключить поток на main?

Таким образом, операторы следующие дальше по цепочке будут выполнять свой код в выбранном потоке планировщика, и следующий элемент не будет взят в обработку, пока текущий элемент не будет обработан всеми нижеследующими операторами, либо не переключится поток

Вот здесь вы это пишете.

поэтому надо быть крайне внимательным и стараться переключать поток сразу после выполнения webClient запросов

а можно более развернутый пример как стоит делать, пожалуйста.

Sign up to leave a comment.

Articles