Сравнение моделей конкурентности JVM языков: Нужен ли еще ThreadPool после coroutines, ZIO и Virtual Threads?

В последней части про модели конкурентности JVM языков мы сравним разные подходы друг с другом. И ответим на вопрос “А зачем теперь тред пулы, если есть столько модных концепций: корутины, файберы, виртуальные потоки ?” Узнать что есть кроме Java Threads

https://habr.com/ru/articles/1035740/

#Java #JVM #Kotlin #Clojure #ZIO #coroutines #virtual_threads #thread_pools #Project_Loom #concurrency

Сравнение моделей конкурентности JVM языков: Нужен ли еще ThreadPool после coroutines, ZIO и Virtual Threads?

Привет, Хабр! В первой и второй частях мы разобрали Java Thread , thread pools, virtual threads, Kotlin coroutines, ZIO runtime и Clojure primitives. Теперь можно сравнивать модели без ощущения, что...

Хабр

Сравнение моделей конкурентности JVM языков: Kotlin coroutines, ZIO runtime и Clojure

Coroutine, Fiber, Virtual thread - это всё одно и то же? Или нет ? Или нет. А если под капотом всё равно JVM, почему нельзя просто везде включить virtual threads и успокоиться? Разберемся! Coroutine, Fiber, Virtual Thread ???

https://habr.com/ru/articles/1034938/

#Java #JVM #Kotlin #Clojure #ZIO #coroutines #virtual_threads #Project_Loom #thread_pools #concurrency

Сравнение моделей конкурентности JVM языков: Kotlin coroutines, ZIO runtime и Clojure

Привет, Хабр ! В первой части я разобрал, как с конкурентностью работает Java: обычные Thread , thread pools, virtual threads и structured concurrency. Теперь пришло время нырнуть в кроличью нору и...

Хабр

Локальное нагрузочное тестирование в Java с использованием Virtual Threads

Всем привет! Меня зовут Михаил, я работаю главным экспертом в ОТП Банке. Я люблю тестировать свои решения и почти всегда пишу unit- и integration-тесты. Но вот с нагрузочным тестированием ситуация обычно совсем другая: о нем вспоминают ближе к релизу, когда архитектуру уже поздно менять. В какой-то момент я поймал себя на мысли: А как вообще заранее понять, сколько ресурсов будет потреблять сервис под нагрузкой? Сколько памяти съест приложение? Когда упрется в CPU? Как поведет себя БД при разном кол-ве запросов? Чтобы ответить на эти вопросы, я написал небольшую библиотеку для локального нагрузочного тестирования на Java Virtual Threads. Она запускает большое количество задач, собирает метрики и формирует отчет - прямо в консоли или в CSV. Сегодня я покажу сам подход, разберу код библиотеки и оставлю ссылку на GitHub-репозиторий, чтобы вы могли попробовать ее у себя или адаптировать под свои задачи.

https://habr.com/ru/articles/1035238/

#java #virtual_threads #multithreading #виртуальные_потоки #нагрузочное_тестирование #нагрузочное_тестрование #unittesting

Локальное нагрузочное тестирование в Java с использованием Virtual Threads

Всем привет! Меня зовут Михаил, я работаю главным экспертом в ОТП Банке. Я люблю тестировать свои решения и почти всегда пишу unit- и integration-тесты. Но вот с нагрузочным тестированием ситуация...

Хабр

Сравнение моделей конкурентности JVM языков: Треды, Пулы и Structured Concurrency

Вы пробовали что-нибудь кроме new Thread() ? Конечно пробовали: Future ! И всё ?! Разберемся с разными моделями конкурентности в Java, Kotlin, Scala/ZIO и Clojure: у всех JVM под капотом, но подходы разные. Начнём с разбора тредов, пулов, virtual threads из Project Loom и Structured Concurrency. Дальше: корутины, fibers, ZIO runtime и Clojure. Узнать что есть кроме Java Threads

https://habr.com/ru/articles/1033894/

#Java #JVM #многопоточность #Thread #Thread_Pool #ExecutorService #Virtual_Threads #Project_Loom #Structured_Concurrency #Blocking_IO

Сравнение моделей конкурентности JVM языков: Треды, Пулы и Structured Concurrency

Привет, Хабр Многие если не все встречались с потоками, пулами потоков и проблемами многопоточности и конкурентности. В JVM языках под капотом одна и таже платформа, но Java, Kotlin, Scala и Clojure...

Хабр

WebFlux vs Virtual Threads: что происходит при 2000 RPS

Всем привет! Меня зовут Александр, и сегодня я расскажу о результатах перевода учебного проекта со Spring WebFlux и Netty на Spring MVC и Tomcat с виртуальными потоками и проверки обоих вариантов под нагрузкой в 2000rps. В качестве подопытного будет выступать система микросервисов, разработанная в рамках курса CloudJava .

https://habr.com/ru/articles/1024936/

#Java #virtual_threads #webflux #springboot #netty #tomcat

WebFlux vs Virtual Threads: что происходит при 2000 RPS

Всем привет! Меня зовут Александр, и сегодня я расскажу о результатах перевода учебного проекта со Spring WebFlux и Netty на Spring MVC и Tomcat с виртуальными потоками и проверки обоих вариантов под...

Хабр

WebFlux, Virtual Threads и все-все-все

Или: как спорили о реактивщине, а потом Java 21 всё запутала ещё сильнее Реактивное программирование обещало нам масштабируемость и производительность. Оно их дало. Но вместе с этим подарило новый вид боли: stacktrace на 47 фреймов, половина из которых operator.onNext , а элементарные вещи написаны так, словно решаешь задачу на leetcode. Потом подвезли Virtual Threads, и половина интернета написала «реактивщина умерла», другая – «ничего не изменилось». Истина где-то посередине. Попробуем с вами разобраться.

https://habr.com/ru/articles/1011538/

#webflux #виртуальные_потоки #virtual_threads #spring #java #reactive

WebFlux, Virtual Threads и все-все-все

Или: как спорили о реактивщине, а потом Java 21 всё запутала ещё сильнее Реактивное программирование обещало нам масштабируемость и производительность. Оно их дало. Но вместе с этим подарило новый вид...

Хабр

Обработка 100 000 запросов с помощью виртуальных потоков Java и сравнение производительности с обычными потоками

Всем привет! Сегодня хочу затронуть тему виртуальных потоков и выяснить на сколько они лучше (быстрее) и в каких случаях, чем обычные потоки операционной системы (или как еще их называют платформенные потоки). Долгое время java полагалась только на потоки операционной системы для обработки параллельных операций. Это выглядело следующим образом, когда веб-сервер получал запрос, он обычно выделял один поток операционной системы для его обработки. Эта модель называется «поток на запрос». Она очень проста — мы просто пишем блокирующий код так, как если бы он был синхронный, а операционная система обрабатывает переключение контекста между потоками в рамках какого-то процесса. Несмотря на свою простоту, эта модель имеет существенный недостаток: потоки операционной системы обходятся дорого. Каждый поток потребляет от 1 до 2 МБ памяти только на свой стек, а переключение между ними включает в себя переключение контекста на уровне операционной системы, что также является ресурсоемкой операцией. Представьте, что есть задача по обработке 100 000 одновременных запросов с помощью этой модели. Это приведёт к потреблению десятков гигабайт памяти только под стеки потоков и, скорее всего, к аварийному завершению JVM задолго до достижения такого количества потоков, также будет тратиться время на переключение контекста между потоками. Пропускная способность системы резко упадет из-за накладных расходов. Для решения этой проблемы разработчики прибегают к сложным асинхронным моделям программирования, к реактивному программированию, к управлению событиями. Хотя эти подходы и являются мощным инструментом, но они вносят значительную сложность, затрудняя чтение, отладку и сопровождение кода. Мы меняем простоту блокирующего кода на сложности, связанные с неблокирующими коллбэками и реактивными потоками.

https://habr.com/ru/articles/992714/

#virtual_threads #threads #java_21

Обработка 100 000 запросов с помощью виртуальных потоков Java и сравнение производительности с обычными потоками

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

Хабр

От Redis к Kafka Streams: как мы проверяем сетевую доступность 200к устройств

В инфраструктуре банка мы ежедневно работаем с ~200 000 физических устройств : это IP-камеры, сетевые видеорегистраторы и другая периферия. Каждое из них должно быть проверено на доступность — не реже чем раз в 10 минут . Требования к системе: - не создавать бессмысленную нагрузку на инфраструктуру; - решение должно быть горизонтально масштабируемым; - система должна выдерживать падение pod, rebalance, сетевые сбои.

https://habr.com/ru/companies/sberbank/articles/974926/

#kafka_streams #virtual_threads #redis #highload

От Redis к Kafka Streams: как мы проверяем сетевую доступность 200к устройств

В инфраструктуре банка мы ежедневно работаем с ~200 000 физических устройств : это IP-камеры, сетевые видеорегистраторы и другая периферия. Каждое из них должно быть проверено на доступность — не реже...

Хабр

Многопоточность для самых маленьких. Виртуальные потоки. Часть 2

Всем привет! Многопоточность в Java развивается очень быстро, а многие всё ещё ограничиваются обычными потоками и ключевым словом synchronized. Сегодня я хочу рассказать именно о виртуальных потоках: как с ними работать, почему они меняют подход к многопоточности и какие задачи решают лучше традиционных механизмов. Буду объяснять просто и понятно, чтобы материал был полезен как новичкам, которые только знакомятся с виртуальными потоками, так и опытным разработчикам, которые хотят понять современные практики и возможности Project Loom.

https://habr.com/ru/articles/971350/

#java #multithreading #virtual_threads #многопоточность #виртуальные_потоки #обучение_программированию

Многопоточность для самых маленьких. Виртуальные потоки. Часть 2

Всем привет! Многопоточность в Java развивается очень быстро, а многие всё ещё ограничиваются обычными потоками и ключевым словом synchronized. Сегодня я хочу рассказать именно о виртуальных потоках:...

Хабр

Java. Многопоточность для самых маленьких. Часть 1

Всем привет! Многопоточность в Java не стоит на месте, а многие до сих пор используют только synchronized и создают потоки через new Thread() . С этого дня я запускаю серию уроков по современной многопоточности: как её правильно строить, в чём преимущества новых подходов по сравнению со старыми и что из классики всё ещё стоит использовать. Постараюсь объяснять максимально просто и наглядно, чтобы уроки были полезны и стажёрам, которые только начинают разбираться в теме, и опытным разработчикам, которым интересно узнать современный стиль работы с потоками. Поехали!

https://habr.com/ru/articles/969820/

#java #multithreading #virtual_threads #concurrency #многопоточность #виртуальные_потоки #обучение #обучение_программированию

Java. Многопоточность для самых маленьких. Часть 1

Всем привет! Многопоточность в Java не стоит на месте, а многие до сих пор используют только synchronized и создают потоки через new Thread() . С этого дня я запускаю серию уроков по современной...

Хабр