Maison >Java >JavaBase >Apprenez à utiliser les verrous Java avec Netty

Apprenez à utiliser les verrous Java avec Netty

coldplay.xixi
coldplay.xixiavant
2021-01-04 10:04:242247parcourir

Tutoriel de base JavaLa colonne présente comment apprendre les verrous Java avec Netty

Apprenez à utiliser les verrous Java avec Netty

Recommandé (gratuit) : Tutoriel de base Java

1 Verrouiller les objets et la portée

  • Réduire la granularité

2 La taille de l'objet verrouillé lui-même

  • Réduire l'espace utilisation

    Atomic long V.S long
    Le premier est un objet, comprenant un en-tête d'objet pour enregistrer le hashcode, le verrou et d'autres informations. Il occupe 16 octets sous un système 64 bits. -système de bits :
  • volatile long= 8 octets
  • AtomicLong = 8 octets (volatile long) + 16 octets (en-tête d'objet) + 8 octets (référence) = 32 octets
    Enregistrez au moins 24 octets !

Objets donc Atomic* => Type primaire volatile + Static Atomic*FieldUpdater

3 Vitesse de verrouillage

Améliorer la simultanéité

Améliorer la simultanéité

LongCounter

est utilisé pour des fonctions telles que l'enregistrement du nombre d'octets d'allocation de mémoire.

Sous haute concurrence : java.util.concurrent.atomic.AtomicLong => java.util.concurrent.atomic.LongAdder

Conclusion : mesurez et utilisez les dernières fonctionnalités du JDK dans un en temps opportun

Selon différentes situations, choisissez différentes implémentations de packages simultanées

JDK< 1.8 Considérez ConcurrentHashMapV8 (la version de ConcurrentHashMap dans jDK8)

4 Choisissez différentes classes de concurrence pour différents scénarios

  • Modifiez en fonction des besoins



    Fermez et attendez l'exécuteur de l'événement d'arrêt ( Event Executor) :

    Object.wait/ notify =》 CountDownLatch



  • File d'attente responsable du stockage des tâches dans la boucle d'événements Nio LinkedBlockingQueue de Jdk (MPMC, multi-producteur Plusieurs consommateurs) -> MPSC de jctools
    io.netty.util.internal.PlatformDependent.Mpsc#newMpscQueue(int):

    5 La valeur du verrouillage


    Si vous pouvez l'utiliser, ne l'utilisez pas

    Scénario d'application Netty : série partielle + parallèle global> mode multi-thread :

    Réduisez les difficultés de développement des utilisateurs, simplifiez la logique et améliorez les performances de traitement
    Évitez la surcharge supplémentaire liée au changement de contexte et à la protection de la concurrence causée par les verrous

    Évitez d'utiliser des verrous : utilisez ThreadLocal pour éviter les ressources conflit, tel que la mise en œuvre du pool de threads Netty Lightweight

    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:
Cet article est reproduit dans:. en cas de violation, veuillez contacter admin@php.cn Supprimer