vendredi 13 octobre 2023

[ Java 21 ] Intro Virtual thread

 

Introduction

Les threads virtuels sont une nouvelle fonctionnalité introduite dans Java 21 qui permettent une exécution plus efficace des threads. 

Comprendre les threads virtuels

Avant l’introduction des threads virtuels, le nombre de threads que vous pouviez avoir dans une application Java était généralement limité par le nombre de threads du système d’exploitation. Ces threads, appelés “threads de plateforme”, sont gérés et planifiés par le système d’exploitation. Chaque thread de plateforme a une grande pile de threads et d’autres ressources qui sont maintenues par le système d’exploitation. Par conséquent, le nombre de threads de plateforme disponibles est limité par les ressources du système, y compris la CPU et la RAM.





Avec l’introduction des threads virtuels dans Java 21, vous pouvez maintenant avoir un nombre beaucoup plus grand de threads dans votre application. Les threads virtuels sont gérés et planifiés par la JVM, et non par le système d’exploitation. Ils ne sont pas liés à un thread du système d’exploitation spécifique, ce qui signifie qu’ils peuvent être répartis plus efficacement sur plusieurs processeurs. De plus, contrairement aux threads de plateforme, les threads virtuels ont généralement une pile d’appels peu profonde, ce qui signifie qu’ils utilisent moins de ressources du système.



Cela signifie que vous pouvez avoir un nombre de threads virtuels égal au nombre de tâches concurrentes dans votre application. Par exemple, si votre programme soumet 1 000 000 de tâches, il peut créer 1 000 000 de threads virtuels qui s’exécutent simultanément.


Cependant, il est important de noter que bien que les threads virtuels puissent améliorer les performances en permettant à un plus grand nombre de tâches de s’exécuter simultanément, ils ne sont pas destinés aux opérations intensives en CPU à long terme. Ils sont plus adaptés aux tâches qui passent la plupart du temps bloquées, souvent en attendant que les opérations d’E/S se terminent


Exemples pratiques

Création de threads virtuels

Voici un exemple de code qui illustre comment créer des threads virtuels en Java 211:

Runnable runnable = () -> System.out.println(Thread.currentThread().threadId());
// Créer des threads virtuels
Thread thread = Thread.ofVirtual().name("testVT").unstarted(runnable);
testVT.start();
// Créer des threads de plateforme virtuels
Thread testPT = Thread.ofPlatform().name("testPT").unstarted(runnable);
testPT.start();

Dans cet exemple, nous créons d’abord une tâche Runnable qui affiche l’ID du thread courant. Ensuite, nous utilisons les nouvelles API Thread.ofVirtual() et Thread.ofPlatform() pour créer respectivement un thread virtuel et un thread de plateforme.

Performance des threads de plateforme vs threads virtuels

Les threads virtuels peuvent aider à augmenter le débit des applications côté serveur car ces applications ont un grand nombre de tâches concurrentes, et ces tâches ont généralement un grand nombre d’attentes d’E/S. Par exemple, si votre programme soumet 1 000 000 de tâches, il peut créer 1 000 000 de threads virtuels qui s’exécutent simultanément

Aucun commentaire:

Enregistrer un commentaire

to criticize, to improve