> Markdown version of [/videos/751-is-reactive-the-new-black-imperative-vs-reactive-programming-with-quarkus?t=4](https://www.wearedevelopers.com/videos/751-is-reactive-the-new-black-imperative-vs-reactive-programming-with-quarkus?t=4). Every page supports `.md` or `Accept: text/markdown`. Links point to the HTML versions so they work for humans too. Agent guide: [/agents.md](https://www.wearedevelopers.com/agents.md). --- # Is reactive the new black? Imperative vs. reactive programming with Quarkus Is the steep learning curve of reactive programming stalling your team? Discover how Quarkus unifies imperative and reactive paradigms to scale IO-heavy microservices efficiently. - **Speakers:** Tatiana Chervova - **Event:** World Congress 2023 - **Published:** October 6, 2023 - **Duration:** 28:12 - **URL:** https://www.wearedevelopers.com/videos/751-is-reactive-the-new-black-imperative-vs-reactive-programming-with-quarkus ## Summary Driven by the demands of high-concurrency cloud environments, software engineering is increasingly shifting from traditional imperative programming toward declarative, reactive architectures. While the imperative execution model assigns a dedicated, persistent thread to each request—leading to blocked resources and wasted CPU cycles during external IO operations—the reactive model leverages non-blocking IO. This approach allows a single IO thread to manage multiple asynchronous requests simultaneously via scheduled callbacks. However, this efficiency introduces a strict functional requirement: if an IO thread inadvertently blocks in a reactive system, it stalls all concurrent processing, mandating highly disciplined asynchronous coding practices. To manage these non-blocking architectures effectively, developers utilize asynchronous data streams to isolate state and decouple application components. By leveraging tools like Mutiny, an event-driven Java library, execution flows only trigger upon active subscription and reliably emit distinct value, failure, or completion events. Ensuring these robust streaming infrastructures stay resilient under high load relies on implementing non-blocking back pressure. This structural mechanism introduces an inversion of control where the downstream consumer actively limits the data flow capacity from the publisher. By communicating explicit processing constraints ("don't call us, we call you"), distributed systems prevent consumer application crashes without resorting to volatile memory buffers or silently dropping critical data packets. Despite its distinct operational advantages for real-time data sources and high-traffic endpoints, sweeping reactive adoption presents a steep initial learning curve and vastly complicates application debugging for sequentially-trained engineers. Flexible modern frameworks like Quarkus navigate this tradeoff by unifying both paradigms, combining a high-performance reactive Vert.x core with complete native support for standard blocking code. Engineering teams can strategically deploy imperative handlers for self-contained, CPU-intensive background batch processing while selectively utilizing non-blocking annotations to scale IO-heavy microservices. Ultimately, successfully deploying reactive systems requires architects to balance raw application performance goals against the practical realities of internal developer education and existing team skill constraints. **Keywords:** imperative vs. reactive programming, non-blocking IO, asynchronous data streams, reactive back pressure, declarative data flow, thread pool management, event-driven architecture, quarkus framework, java 17 development, eclipse vert.x, mutiny reactive library, handling concurrent requests, internal dev education, reactive streams specification, inversion of control mechanism ## Chapters 1. **The growing demand for reactive programming in modern projects** (00:04) — Analyzing the rising popularity and developer interest in reactive frameworks. 1. **Comparing imperative, declarative, and reactive programming paradigms** (03:22) — How declarative data flow programming differs from traditional step-by-step instructions. 1. **Core principles of the reactive manifesto for modern architecture** (05:15) — Defining reactive systems through responsiveness, resilience, elasticity, and message-driven behavior. 1. **Analyzing request processing with blocking and non-blocking IO** (07:22) — How allocating a single thread per request constrains concurrency compared to asynchronous callbacks. 1. **Managing asynchronous data streams and specific event types** (11:27) — Treating variables and inputs as continuous streams composed of value, failure, and completion events. 1. **Handling consumer overflow using non-blocking back pressure** (14:33) — Allowing consumers to control data flow by explicitly requesting items only when capacity permits. 1. **Executing stream operations with the Mutiny reactive library** (18:34) — Understanding how synchronous execution requires an active subscription to process emitted items. 1. **Evaluating performance benefits against developer learning curve challenges** (20:49) — Balancing high-load efficiency with the difficulty of debugging asynchronous execution and training teams. 1. **Selecting appropriate use cases for reactive and imperative paths** (22:57) — Matching project requirements like high concurrency or continuous data feeds to the right architectural approach. 1. **Combining imperative and reactive execution models with Quarkus** (24:51) — Leveraging the Quarkus Vert.x core to seamlessly integrate blocking and non-blocking handlers. 1. **Lessons learned and strategies for internal developer onboarding** (26:08) — Pairing experienced engineers with beginners to overcome the steep learning curve of new frameworks. ## Related Moments - [Technology stack for building robust microservices applications](https://www.wearedevelopers.com/videos/89-development-of-reactive-applications-with-quarkus) (from "Development of reactive applications with Quarkus") - [Building scalable applications with reactive programming](https://www.wearedevelopers.com/videos/383-kubernetes-native-java) (from "Kubernetes Native Java") - [Navigating the learning curve of reactive programming](https://www.wearedevelopers.com/videos/1-practice-makes-perfect-when-it-comes-to-rxjs) (from "Practice makes perfect - when it comes to RxJS") - [Shifting to reactive programming paradigms in Java code](https://www.wearedevelopers.com/videos/89-development-of-reactive-applications-with-quarkus) (from "Development of reactive applications with Quarkus") - [Contextual history of reactive programming in Java ecosystems](https://www.wearedevelopers.com/videos/1973-beyond-loom-practical-patterns-for-virtual-threads-structured-concurrency-and-reactive-interop) (from "Beyond Loom: Practical Patterns for Virtual Threads, Structured Concurrency and Reactive Interop") - [Exploring reactive programming implications and virtual thread usage](https://www.wearedevelopers.com/videos/659-introduction-and-pitfalls-of-java-s-new-concurrency-model) (from "Introduction and pitfalls of Java's new concurrency model") ## Related Articles - [The Best JavaScript Framework to Learn](https://www.wearedevelopers.com/magazine/229-the-best-javascript-framework-to-learn) - [Why Event-Driven Architecture Isn’t About Speed (and When You Actually Need It)](https://www.wearedevelopers.com/magazine/745-why-event-driven-architecture-isn-t-about-speed-and-when-you-actually-need-it) - [Résumé-Driven Development: How IT trends affect the job market for software developers](https://www.wearedevelopers.com/magazine/59-resume-driven-development-how-it-trends-affect-the-job-market-for-software-developers) - [Now is the time for industrialized software development](https://www.wearedevelopers.com/magazine/601-now-is-the-time-for-industrialized-software-development) ## Related Jobs - [Platform Engineer - Mercury Runtime Platform](https://www.wearedevelopers.com/jobs/ext/293235-platform-engineer-mercury-runtime-platform) at **Raiffeisen Bank International AG** - [Mid/Senior Full-Stack Engineer (Web-first)](https://www.wearedevelopers.com/jobs/ext/1210833-mid-senior-full-stack-engineer-web-first) at **SMG Swiss Marketplace Group** - [Senior Engineer, Infrastructure Platform](https://www.wearedevelopers.com/jobs/ext/328836-senior-engineer-infrastructure-platform) at **Intercom, Inc.** - [Platform Engineer (f/m/x) - Mercury Runtime Platform](https://www.wearedevelopers.com/jobs/48266-platform-engineer-f-m-x-mercury-runtime-platform) at **Raiffeisen Bank International AG** - [Senior Software Engineer, Client Apps Platform](https://www.wearedevelopers.com/jobs/ext/1773893-senior-software-engineer-client-apps-platform) at **GitHub** - [Junior Frontend Engineer](https://www.wearedevelopers.com/jobs/ext/1532351-junior-frontend-engineer) at **Almedia**