mboost-dp1

Java virtual threads the good and the bad


Gå til bund
Gravatar #1 - arne_v
4. mar. 2024 01:24
Java har for nylig fået virtuelle threads.

Threads er en måde at lave concurrency på som ikke påvirker koden ret meget.

Men der er også et problem. OS skal administrere trådene og med rigtigt mange tråde så begynder OS at bruge mere tid på at administrere trådene end tråden bruger på at udføre ophaver. Med udelukkende CPU tasks så er flere tråde end CPU kan eksekvere samtidigt spild. I en typisk web server sammenhæng hvor mange tråde venter på IO, så er mere end noget i størrelsesordenen 500 x antal VCPU spild.

En måde at løse det på er diverse async/reactive/event-driven tilgange. Og på mange måder er de den rigtige løsning. Men de kræver også at koden laves anderledes.

Java har også reactive frameworks (inkl. actor framework Akka), men man har også ønsket at gøre noget med traditionel multi-threading. Så Java 19 introducerede virtual threads i preview og Java 21 gjorde dem production ready.

Virtual threads er reelt en gammel ide som eksisterede i BEA JRockIt JVM tilbage først i 00'erne.

Ideen går ud på at mappe N virtuelle tråde til M OS tråde hvor N er meget større end M.

Det virker fint. Man kan faktisk starte alle de virtuelle tråde man vil uden at dræbe performance. Jeg har testet op til 32K tråde.

Og det hjælper på performance. Den simpel web server som kommer med JDK kan håndtere 100K req/sec eller 6M req/min med virtuelle tråde.

https://github.com/ebarlas/java-httpserver-vthread...

Cool.

Ikke helt så cool er at der er potentielle problemer. Man har fundet ud af visse brug af synkronisering får OS tråden til ikke at blive frigivet når den virtuelle tråde blokerer.

https://inside.java/2024/02/21/quality-heads-up/
Gravatar #2 - larsp
4. mar. 2024 11:17
Det lyder som en art "light threads" der deles om reelle tråde. Når der er flere virtuelle tråde til en OS tråd, hvordan deles de så om CPU tid, er det med cooperativ multitasking, altså at der kan kun ske context switch i blocking kald og sleeps?
Gravatar #3 - arne_v
4. mar. 2024 14:32
larsp (2) skrev:

Det lyder som en art "light threads" der deles om reelle tråde.


Præcis.

larsp (2) skrev:

Når der er flere virtuelle tråde til en OS tråd, hvordan deles de så om CPU tid, er det med cooperativ multitasking, altså at der kan kun ske context switch i blocking kald og sleeps?


Ja.

Gå til top

Opret dig som bruger i dag

Det er gratis, og du binder dig ikke til noget.

Når du er oprettet som bruger, får du adgang til en lang række af sidens andre muligheder, såsom at udforme siden efter eget ønske og deltage i diskussionerne.

Opret Bruger Login