Maison  >  Article  >  Java  >  Java Virtual Threads : révolutionner la concurrence !

Java Virtual Threads : révolutionner la concurrence !

Susan Sarandon
Susan Sarandonoriginal
2024-11-03 12:35:301001parcourir

Java 21 introduit un Thèmes de discussion virtuels qui change la donne ! Décrivons ce qu'est cette fonctionnalité, en quoi elle diffère du modèle traditionnel, ainsi que ses avantages et ses inconvénients.

Que sont les fils virtuels ?

Java Virtual Threads: Revolutionizing Concurrency!
Dans les versions précédentes de Java, créer un thread signifiait le lier directement à un thread du système d'exploitation (OS), ce qui constitue une ressource limitée. La rotation d'un grand nombre de threads de système d'exploitation entraînait souvent des goulots d'étranglement en termes de performances et une utilisation accrue de la mémoire. Avec Java 21, Virtual Threads (alias Project Loom) vise à résoudre ce problème en proposant des threads légers et gérables, découplés des threads du système d'exploitation.

? En termes simples : considérez les threads virtuels comme des threads de petite taille qui vous permettent de gérer plus efficacement des milliers de tâches simultanées sans monopoliser les ressources système.


L'ancien modèle de thread par rapport aux threads virtuels

Java Virtual Threads: Revolutionizing Concurrency!
L'ancien modèle de thread Java, basé sur les « threads de plate-forme », exigeait que chaque thread Java ait un mappage 1:1 avec un thread du système d'exploitation. Bien que fiable, cela signifiait également :

Limites de mémoire : Les threads de la plate-forme occupaient une mémoire importante.
Problèmes de mise à l'échelle : la gestion d'un nombre élevé de threads pourrait surcharger les ressources système.
Problèmes d'E/S bloquants : Les threads du système d'exploitation en attente d'E/S ont bloqué d'autres opérations, ralentissant les performances.

Participez aux discussions virtuelles ! ?‍♂️
Les threads virtuels vous permettent de créer des millions de threads sans contrainte de ressources. Ils ne sont pas liés aux threads du système d'exploitation, donc lorsqu'un thread virtuel est bloqué (par exemple, en attente d'E/S), le thread porteur sous-jacent peut récupérer un autre thread virtuel pour que tout fonctionne correctement.


Threads traditionnels et threads virtuels

Java Virtual Threads: Revolutionizing Concurrency!

TRADITIONAL THREADS                        VIRTUAL THREADS
---------------------------------          ---------------------------------
| Java Thread -> OS Thread -> Task |       | Virtual Thread -> Carrier OS Thread |
| Java Thread -> OS Thread -> Task |  ->   | Virtual Thread -> Carrier OS Thread |
| Java Thread -> OS Thread -> Task |       | Virtual Thread -> Carrier OS Thread |
---------------------------------          ---------------------------------


Dans Virtual Threads, plusieurs threads virtuels peuvent être attribués à un seul thread du système d'exploitation, optimisant ainsi l'allocation des ressources.

Avantages et inconvénients des fils de discussion virtuels

Avantages

Évolutivité supérieure : Gérez des millions de threads, ce qui le rend parfait pour les applications côté serveur.
Moins d'utilisation de la mémoire : Les threads virtuels sont légers, ce qui signifie que chacun ne nécessite pas un thread complet du système d'exploitation.
Blocage efficace des E/S : Lorsque les threads virtuels rencontrent des E/S bloquantes, les threads porteurs peuvent prendre en charge d'autres tâches, gardant le système actif.
Meilleure gestion des ressources : Les threads ne sont plus limités à un pool limité de threads du système d'exploitation, ce qui réduit le gaspillage de ressources.

Inconvénients

Courbe d'apprentissage : Les threads virtuels introduisent de nouveaux concepts de concurrence qui peuvent nécessiter de repenser les pratiques de gestion des threads existantes.
Nouveaux défis de débogage : Le débogage de milliers (voire de millions) de threads virtuels peut être plus complexe.
Pas idéal pour toutes les applications : Les applications à thread unique ou celles avec une concurrence minimale ne bénéficieront pas beaucoup des threads virtuels.


Exemple de code : threads traditionnels ou virtuels

Regardons un exemple simple de fils de discussion traditionnels et comparons-le aux fils de discussion virtuels.

Fils traditionnels

TRADITIONAL THREADS                        VIRTUAL THREADS
---------------------------------          ---------------------------------
| Java Thread -> OS Thread -> Task |       | Virtual Thread -> Carrier OS Thread |
| Java Thread -> OS Thread -> Task |  ->   | Virtual Thread -> Carrier OS Thread |
| Java Thread -> OS Thread -> Task |       | Virtual Thread -> Carrier OS Thread |
---------------------------------          ---------------------------------

Fils virtuels (Java 21)

Les threads virtuels sont gérés indépendamment par la machine virtuelle Java (JVM) et ne se limitent pas aux threads du système d'exploitation.

public class TraditionalThreadExample {
    public static void main(String[] args) {
        Thread thread = new Thread(() -> System.out.println("Hello from a traditional thread!"));
        thread.start();
    }
}

exemple d'exécution de 100 000 tâches à l'aide de la plateforme et des threads virtuels.

public class VirtualThreadExample {
    public static void main(String[] args) {
        Thread.startVirtualThread(() -> System.out.println("Hello from a virtual thread!"));
    }
}


Quand devriez-vous utiliser les threads virtuels ?

  • Applications serveur : gestion de plusieurs requêtes simultanées, telles que des serveurs Web ou des connexions à des bases de données.
  • Applications liées aux E/S : il s'agit en particulier d'applications comportant des opérations d'E/S lourdes telles que le traitement de fichiers, les requêtes réseau ou le web scraping.
  • Microservices cloud natifs : les systèmes nécessitant une grande évolutivité bénéficieront des threads virtuels.

Conclusion : L'avenir de la concurrence est là ?

Avec l'introduction des threads virtuels dans Java 21, la gestion des tâches simultanées est plus efficace, évolutive et légère que jamais. Que vous traitiez des centaines ou des millions de tâches, les threads virtuels ouvrent la voie à une méthode de programmation Java plus simple et plus économe en ressources.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn