Java: concorrenza e virtual threads
Concorrenza senza sprechi
Gestire migliaia di richieste simultanee in Java ha sempre significato fare i conti con i thread di piattaforma, costosi in memoria e limitati nel numero. I virtual thread, introdotti nel Java recente, cambiano radicalmente questo scenario.
Thread di piattaforma e pool
Tradizionalmente si usano pool di thread per riutilizzare risorse costose. Il pool limita il parallelismo per non saturare il sistema, ma diventa un collo di bottiglia quando le operazioni sono I/O bound e i thread restano in attesa.
ExecutorService pool = Executors.newFixedThreadPool(200);
pool.submit(() -> chiamaServizioEsterno());
I virtual thread
Un virtual thread e gestito dalla JVM, non dal sistema operativo: e leggerissimo, e se ne possono creare milioni. Quando si blocca su un'operazione di I/O, la JVM lo sgancia dal thread portante, liberandolo per altro lavoro.
try (var executor = Executors.newVirtualThreadPerTaskExecutor()) {
for (int i = 0; i < 10_000; i++) {
executor.submit(() -> chiamaServizioEsterno());
}
}
Quando usarli
I virtual thread brillano nei carichi con molta attesa I/O, come server web e client di servizi remoti, dove permettono di scrivere codice bloccante semplice ma scalabile. Per lavoro CPU intensivo restano validi i pool tradizionali.
In MUSTNODE SRL adottiamo i virtual thread per costruire backend Java capaci di gestire un'alta concorrenza con codice leggibile, senza la complessita della programmazione asincrona esplicita.
Articoli correlati
Altri approfondimenti dalla categoria Backend & Java.
Node.js Streams per gestire grandi volumi di dati
Come usare gli stream di Node.js per elaborare file e flussi di dati di grandi dimensioni senza saturare la memoria.
Java moderno: record, sealed e pattern matching
Le novita del Java recente che rendono il codice piu conciso ed espressivo: record, classi sealed e pattern matching su switch.
Costruire API REST con Spring Boot
Dai controller alla validazione, dalla gestione degli errori alla documentazione: come strutturiamo API REST solide con Spring Boot.