Mindmap-Galerie Java-Parallelität
Dies ist eine Mindmap zur Java-Parallelität. Der Hauptinhalt umfasst: Sperren, Thread-Pools, gleichzeitige Container und grundlegende Konzepte.
Bearbeitet um 2024-04-22 19:41:17Die Kontrolle der Personalkosten ist für Unternehmen ein wichtiges Mittel zur Maximierung des wirtschaftlichen Nutzens. Unternehmen müssen ihre zentrale Wettbewerbsfähigkeit kontinuierlich verbessern, um Herausforderungen bewältigen zu können.
Dies ist kein Leitfaden für pädagogische Techniken, sondern eine Reise, um die Stimmung für Bildung zu finden. Lieber Leser, in diesem Buch können Sie in jeder pädagogischen Geschichte sehen, wie ein echter Pädagoge sein sollte – einfühlsam und witzig, wissend, was für Kinder angemessen und unangemessen ist und wissen, was man sagen soll, was nicht gesagt werden sollte, achten Sie darauf auf die Einzigartigkeit des Kindes achten, auf die individuelle Lebenswelt des Kindes achten und wissen, wie man das Kind „sieht“ und „zuhören“ kann. Nur wahre Pädagogen können die Herzen der Kinder verstehen, den Ton der Quasi-Bildung festlegen und Bildung und Wachstum schöner und erfüllender gestalten!
In diesem Buch geht der Autor auf die Details ein und fasst eine Reihe von Lernmethoden zusammen, die für die meisten Menschen zum Erlernen von Wissen und Fähigkeiten geeignet sind. Nach Meinung des Autors kann jedes Lernen in drei Phasen unterteilt werden: präzise Eingabe, tiefe Verdauung und mehrfache Ausgabe. Das erste ist die Eingabe von Wissen, was bedeutet, dass man zunächst neues Wissen aufnimmt, dann das eingegebene Wissen versteht und schließlich das gelernte Wissen nutzt. Ich hoffe, dass dieses Buch allen zugute kommt, die beim Lernen verwirrt sind oder nicht wissen, wie man eine neue Fähigkeit erlernt!
Die Kontrolle der Personalkosten ist für Unternehmen ein wichtiges Mittel zur Maximierung des wirtschaftlichen Nutzens. Unternehmen müssen ihre zentrale Wettbewerbsfähigkeit kontinuierlich verbessern, um Herausforderungen bewältigen zu können.
Dies ist kein Leitfaden für pädagogische Techniken, sondern eine Reise, um die Stimmung für Bildung zu finden. Lieber Leser, in diesem Buch können Sie in jeder pädagogischen Geschichte sehen, wie ein echter Pädagoge sein sollte – einfühlsam und witzig, wissend, was für Kinder angemessen und unangemessen ist und wissen, was man sagen soll, was nicht gesagt werden sollte, achten Sie darauf auf die Einzigartigkeit des Kindes achten, auf die individuelle Lebenswelt des Kindes achten und wissen, wie man das Kind „sieht“ und „zuhören“ kann. Nur wahre Pädagogen können die Herzen der Kinder verstehen, den Ton der Quasi-Bildung festlegen und Bildung und Wachstum schöner und erfüllender gestalten!
In diesem Buch geht der Autor auf die Details ein und fasst eine Reihe von Lernmethoden zusammen, die für die meisten Menschen zum Erlernen von Wissen und Fähigkeiten geeignet sind. Nach Meinung des Autors kann jedes Lernen in drei Phasen unterteilt werden: präzise Eingabe, tiefe Verdauung und mehrfache Ausgabe. Das erste ist die Eingabe von Wissen, was bedeutet, dass man zunächst neues Wissen aufnimmt, dann das eingegebene Wissen versteht und schließlich das gelernte Wissen nutzt. Ich hoffe, dass dieses Buch allen zugute kommt, die beim Lernen verwirrt sind oder nicht wissen, wie man eine neue Fähigkeit erlernt!
Java-Parallelität
Basiskonzept
Verfahren
Haufen
Methodenbereich
Der Heap und der Methodenbereich sind Ressourcen, die von allen Threads gemeinsam genutzt werden. Der Heap ist der größte Speicherbereich im Prozess und wird hauptsächlich zum Speichern neu erstellter Objekte verwendet (fast alle Objekte weisen hier Speicher zu. Der Methodenbereich wird hauptsächlich zum Speichern geladener Objekte verwendet). Objekte. Klasseninformationen, Konstanten, statische Variablen, vom Just-in-Time-Compiler kompilierter Code und andere Daten.
Faden
Programm zähler
Stapel virtueller Maschinen
nativer Methodenstapel
Ein Prozess kann mehrere Threads enthalten, und mehrere Threads teilen sich die Ressourcen des Heap- und Methodenbereichs (Metaspace nach JDK1.8) des Prozesses. Jeder Thread verfügt jedoch über einen eigenen Programmzähler, einen eigenen Stapel für virtuelle Maschinen und einen eigenen Stapel für lokale Methoden.
gleichzeitig
parallel
Kann leicht zu Speicherlecks, Deadlocks und Thread-Unsicherheit führen
Synchronisieren
asynchron
Thread-Sicherheit
Erstelle einen Thread
Thread-Lebenszyklus und -Status
NEU
Bereit (lauffähig)
Läuft
verstopft
Synchrones Blockieren (Blockiert)
Warten auf Blockierung (WAITING)
Timeout-Warteblockierung (TMME-WAITING)
Tod (Tot/BEENDET)
Thread-Kontextwechsel
Thread-Deadlock
Vier notwendige Bedingungen für einen Deadlock
So verhindern Sie einen Deadlock
Fehlerbehebung
Grafisch: jconsole
jps -l ermittelt die Programmprozessnummer und die Jstack-Prozessnummer
JMM
Definition
Hintergrund
CPU- und Cache-Kohärenz
Prozessoroptimierung
Parallele Neuordnung von Anweisungen
Neuordnung der Compiler-Optimierung
Neuordnung des Speichersystems
Parallelitätstheorie
Als ob serielle Regeln
geschieht vor der Regel
Regeln für den Programmablauf
Sperrregeln überwachen
Regeln für flüchtige Variablen
Transitivitätsregel
start()-Regel
join()-Regeln
Drei Hauptmerkmale
Atomizität
Sichtweite
Ordentlichkeit
So lösen Sie Parallelitätsprobleme
Drei wichtige Schlüsselwörter
flüchtig
Sichtweite
geschieht vor Prinzip
Prinzip
Schreibgedächtnissemantik
Speichersemantik lesen
Ordentlichkeit
Implementierung der Speichersemantik
synchronisiert
Wirkung
Atomizität
Ordentlichkeit
Sichtweite
Schreibgedächtnissemantik
Speichersemantik lesen
Verwendung
Instanzmethoden dekorieren
Statische Methoden ändern
Codeblöcke dekorieren
Prinzip
synchronisierter Codeblock
Synchronisierungsmethode
Java-Objektmodell
Objektheader
Wort markieren
Klass Point
Instanzdaten
Byte-Ausrichtung
Schloss-Upgrade
kein Schloss
Sperrstatus
Vorspannungssperre
Sperrstatus
Upgrade-Zeit
Spezifische Operationen
Nutzen
Die voreingenommene Thread-ID stimmt nicht mit der aktuellen Thread-ID überein.
Wettbewerbserfolg
Der Wettbewerb ist gescheitert
Technische Umsetzung
leichtes Schloss
Sperrstatus
Upgrade-Zeit
Wirkung
Drehen
Der Unterschied zwischen Bias-Lock und Bias-Lock
Schweres Schloss
Sperrstatus
Upgrade-Zeit
Prinzip
jdk1.6-Optimierung
Spin-Lock
Adaptive Spin-Sperre
Sperrenbeseitigung
Schlossaufrauung
Vorspannungssperre
leichtes Schloss
Finale
Wirkung
Neuordnungsregeln
Schreiben Sie Neuordnungsregeln für endgültige Felder
Neuordnungsregeln zum Lesen endgültiger Felder
Gedächtnisbarriere
gleichzeitiger Container
Aufführen
CopyOnWriteArrayList
Vektor
Satz
CopyOnWriteArraySet
Karte
ConcurrentHashMap
ConcurrentSkipListMap
Hash-tabelle
Warteschlange
ArrayBlockingQueue
LinkedBlockingQueue
PriorityBlockingQueue
SynchronousQueue
Thread-Pool
Definition
Vorteil
Reduzieren Sie den Ressourcenverbrauch
Verbessern Sie die Reaktionsgeschwindigkeit
Verbessern Sie die Thread-Verwaltbarkeit
So erstellen Sie
Testamentsvollstrecker
FixedThreadPool
SingleThreadExecutor
Es wird wahrscheinlich eine unbegrenzte LinkedBlockingQueue verwendet. Die maximale Länge der Aufgabenwarteschlange beträgt Integer.MAX_VALUE. Es kann sich eine große Anzahl von Anforderungen ansammeln, was zu OOM führt.
CachedThreadPool
Die SynchronousQueue-Synchronisationswarteschlange wird verwendet und die Anzahl der Threads, die erstellt werden dürfen, ist Integer.MAX_VALUE.
ScheduledThreadPool
Es wird die unbegrenzte verzögerte Blockierungswarteschlange DelayedWorkQueue verwendet. Die maximale Länge der Aufgabenwarteschlange beträgt Integer.MAX_VALUE, wodurch sich eine große Anzahl von Anforderungen ansammeln kann, was zu OOM führt.
ThreadPoolExecutor
Gemeinsame Parameter
corePoolSize
maximalePoolSize
Arbeitswarteschlange
keepAliveTime
Einheit
ThreadFactory
Handler
AbortPolicy
CallerRunsPolicy
DiscardPolicy
DiscardOldestPolicy
Prozess der Bearbeitung von Aufgaben
So legen Sie die Größe des Thread-Pools fest
Theoretischer Algorithmus
empirische Methode
CPU-intensive Aufgaben (N 1)
E/A-intensive Aufgaben (2N)
Zukunftsklasse
Aufgabe abbrechen
Stellen Sie fest, ob die Aufgabe abgebrochen wurde
Stellen Sie fest, ob die Aufgabe abgeschlossen wurde
Erhalten Sie Ergebnisse der Aufgabenausführung
Mangel
Abschließbare Zukunft
Beheben Sie die Mängel der Zukunft
Vorteil
Fertigstellungsphase
Sperren
Basiskonzept
pessimistische Sperre
Vorteil
Die Kosten für pessimistisches Sperren sind festgelegt
Mangel
Ein starker Sperrwettbewerb kann zu Thread-Blockierungen führen
Eine große Anzahl blockierter Threads führt zu einem Kontextwechsel des Systems Erhöhen Sie den Systemleistungsaufwand
Pessimistisches Sperren kann auch zu Deadlock-Problemen führen
Anwendbare Szene
Schreiben Sie mehrere Szenarien und einen harten Wettbewerb (um häufige Fehler und Wiederholungsversuche zu vermeiden, die sich auf die Leistung auswirken).
optimistische Verriegelung
Vorteil
Es gibt keine Sperrenkonkurrenz, die zum Blockieren von Threads führt
Es wird kein Deadlock-Problem geben
Mangel
Wenn Konflikte häufig auftreten (es werden viele Schreibvorgänge ausgeführt), kommt es häufig zu Fehlern und Wiederholungsversuchen.
Anwendbare Szene
Mehrere Leseszenarien, weniger Konkurrenz (kann häufiges Sperren vermeiden, das sich auf die Leistung auswirkt)
Implementierungsplan
Versionsnummernmechanismus
CAS-Algorithmus
ABA-Fragen
Lange Zykluszeit und hoher Overhead
Nur atomare Operationen auf einer gemeinsam genutzten Variablen sind garantiert
ThreadLocal
Wirkung
Prinzip
Hash-Algorithmus
Hash-Konflikt
Problem mit Speicherverlust
Grund
Lösung
AQS
Hauptidee
Zustand
CLH-Warteschlange
Struktur
Prinzip
Vorteil
Hervorragende Leistung, geringer Aufwand für das Erfassen und Freigeben von Sperren.
faires Schloss
Einfach umzusetzen und leicht zu verstehen
Starke Skalierbarkeit
Mangel
Der Spin-Vorgang verursacht einen hohen CPU-Overhead, wenn die Sperre über einen längeren Zeitraum gehalten wird.
Einzelfunktion, komplexe Funktionen können nicht unterstützt werden
CLH-Kohortenvarianten
AQS ändert den Spin-Betrieb in einen blockierenden Thread-Betrieb
Verbesserungen beim Sperren von Datenstrukturen
Erweitern Sie den Status jedes Knotens
SIGNAL
VERBREITEN
ZUSTAND
ABGESAGT
Pflegen Sie Vorgänger- und Nachfolgerknoten explizit
Optimierung des Hilfs-GC, z. B. explizites Setzen des Dequeue-Knotens auf Null
Schematische Darstellung
gemeinsame Sperre
Exklusives Schloss
ReentrantLock
was ist
Prinzip
Unfairer Sperrvorgang
Wenn Thread eins erfolgreich gesperrt wurde
AQS-interne Daten
Thread-2-Sperre ist fehlgeschlagen
CLH-Warteschlangensituation
Die Thread-3-Sperre ist fehlgeschlagen
Fairer Lock-Verriegelungsprozess
Entsperrvorgang
Der Vorgang des Aufhebens der Sperre
Warten auf Warteschlangendaten
endgültige Warteschlangendaten
Zustand
Umsetzungsprinzip
ReentrantReadWriteLock
Anwendbare Szene
Kann ein Thread trotzdem eine Schreibsperre erhalten, wenn er eine Lesesperre hält?
Die Lesesperre kann nicht auf eine Schreibsperre erweitert werden
Semaphor
Zwei Modi
Fair-Modus
Unfaires Modell
Prinzip
CountDownLatch
Wirkung
Prinzip
Einweg
CyclicBarrier
Atomklasse
Grundtyp
AtomicInteger
AtomicLong
AtomicBoolean
Array-Typ
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
Referenztyp
AtomicReference
AtomicStampedReference
Art der Änderung der Objekteigenschaft
AtomicIntegerFieldUpdater
AtomicLongFieldUpdater
AtomicReferenceFieldUpdater