Module 9: Async Flashcards
Wat is asynchroon programmeren?
Asynchrone programmering is een vorm van programmeren waarmee een werkeenheid afzonderlijk van de main thread kan worden uitgevoerd.
Asynchroon programmeren is een vorm van programmeren waarin je minder zekerheid hebt over de volgorde waarin taken uitgevoerd zullen worden. Maar wat je hier voor terug krijgt is een flow waar de thread bezig kan gaan met andere taken wanneer de huidige taak ergens op moet wachten zoals een IO operatie.
Waarom asynchroon programmeren?
Voor het optimaal benutten van resources. Er kan meer/beter gebruik gemaakt worden van de CPU en er kan efficiënter met geheugen omgegaan worden. Dit resulteerd in betere performance, responsiveness en resilience.
Wat is de CompletableFuture?
De CompletableFuture is een klasse waarmee we middels een instantie van deze klasse een async operatie kunnen uitvoeren.
Met welke methode kunnen we (synchronized) toegang krijgen tot het resultaat van een CompletableFuture?
Om toegang te krijgen tot de waarde in een future kan er gebruik gemaakt worden van de get() methode. Deze methode blokkeert de thread totdat de future klaar is.
Wat is de standaard threadpool die gebruikt wordt voor de CompletableFuture?
ForkJoinPool.commonPool().
Welke soorten Threadpools zijn er?
- Fixed, een pool met een vast aantal threads. Goed voor CPU intensieve taken.
- Work stealing, probeert taken zo efficiënt mogelijk te verdelen aan de hand van het ingestelde parallellisme niveau.
- Single, een pool met een enkele thread.
- Cached, een pool waar voor elke taak een thread wordt gemaakt of hergebruikt.
Welke soort Threadpool is in de praktijk meestal de beste keuze?
Fixed.
Wat is Spring Webflux?
Spring WebFlux is een webframework dat bovenop Project Reactor is gebouwd en brengt reactive programming naar Spring.
Spring WebFlux wijkt af van het thread-per-request-blokkeringsmodel in traditionele SpringMVC en gaat naar een multi-EventLoop, async, non-blocking (met Netty standaard) paradigma met tegendruk die meer schaalbaar is en efficiënter dan de traditionele blokkeringscode.
Wat is reactive programming?
Reactive programming is een paradigma dat vertrouwt op asynchrone programmeerlogica om realtime updates van anders statische inhoud af te handelen.
In Spring Webflux wordt er veel gebruik gemaakt van twee publishers. Welke?
- Mono, Bevat een stream waar 0 of 1 element in zit.
- Flux, Bevat een stream waar 0 tot n elementen in zitten.
Wat is het Back pressure mechanisme in Spring Webflux?
In Spring Webflux wordt voorkomen dat een publisher een subscriber overweldigd door gebruik te maken van het back pressure mechanisme.
Het mechanisme werkt op basis van een pull push aanpak. Een subscriber vraagt n elementen op. De publisher stuurt dan de elementen in zijn buffer naar de subscriber. Op deze manier geeft de subscriber zelf aan hoeveel elementen hij kan verwerken.
Welke webserver maakt Spring Webflux standaard gebruik van? En wat is het?
Netty.
Netty is een asynchroon event driven network application framework. Door netty te gebruiken kan je non blocking communicatie verwerkelijken waarin back pressure wordt toegepast.
Wat is het verschil tussen Spring Webflux en Spring MVC?
In Spring MVC wordt wordt gebruik gemaakt van servlets waarin standaard voor elke request een thread wordt aangemaakt waarin blocking calls plaats vinden.
In Spring Webflux worden standaard evenveel threads aangemaakt als de hoeveelheid beschikbare CPU cores. Deze threads handelen binnenkomende requests af d.m.v een event loop waarbij geen blocking calls gemaakt worden.
Is het mogelijk om Servlet containers te gebruiken voor Spring Webflux?
Het is ook mogelijk om servlet containers te gebruiken in Spring Webflux zoals Tomcat en Jetty. Hiervoor wordt dan de asynchrone servlet 3.1 API gebruikt.
Hoe kan je in Spring asynchrone methodes aangeven?
met de @Async annotatie. Voordat je er gebruik van kan maken moet de @EnableAsync annotatie zijn toegevoegd aan de applicatie configuratie.