Was ist Parallelität?
Parallelität: bezieht sich auf die abwechselnde Ausführung mehrerer Aufgaben innerhalb eines bestimmten Zeitraums. Wenn mehrere Threads ausgeführt werden, wird die CPU-Laufzeit in mehrere Zeiträume unterteilt und diese Zeiträume dann jedem Thread zur Ausführung zugewiesen. Während der Code eines Threads ausgeführt wird, werden andere Threads angehalten.
In einer gleichzeitigen Umgebung wird der Abschluss des Programms unterbrochen und die folgenden Merkmale treten auf:
● Es besteht eine gegenseitige Einschränkungsbeziehung zwischen gleichzeitigen Programmen. Direkte Einschränkungen spiegeln sich darin wider, dass ein Programm die Berechnungsergebnisse eines anderen Programms erfordert. Indirekte Einschränkungen spiegeln sich darin wider, dass mehrere Programme um gemeinsam genutzte Ressourcen wie Prozessoren, Puffer usw. konkurrieren.
● Der Ausführungsprozess gleichzeitiger Programme erfolgt zeitweise. Das Programm muss sich Anweisungen und Ausführungspunkte vor Ort merken.
● Wenn die Anzahl der Parallelitäten angemessen eingestellt ist und die CPU über ausreichende Rechenleistung verfügt, verbessert die Parallelität die Ausführungseffizienz des Programms.
Wenn in einer gleichzeitigen Umgebung mehrere Threads auf ein Objekt zugreifen können, kann das Objekt von jedem Thread, auf den zugegriffen wird, geändert werden, was zu Dateninkonsistenzen führt. Daher wird das Konzept der Thread-Sicherheit vorgeschlagen.
Parallelität und Parallelität
sind sehr verwirrende Konzepte. Parallelität bezieht sich auf die abwechselnde Ausführung mehrerer Aufgaben, während Parallelität im eigentlichen Sinne die „gleichzeitige Ausführung“ bezeichnet. Wenn im System nur eine CPU vorhanden ist und Multithreading verwendet wird, kann dies in der realen Systemumgebung nicht parallelisiert werden. Dies kann nur abwechselnd durch Umschalten von Zeitscheiben erfolgen, um Aufgaben gleichzeitig auszuführen. Echte Parallelität kann nur auf Systemen mit mehreren CPUs auftreten.
[Empfohlenes Lernen: Java-Video-Tutorial]
Warum Parallelität verwenden?
Die gleichzeitige Programmierung ist bis zu einem gewissen Grad untrennbar mit der Entwicklung von Multi-Core-CPUs verbunden. Mit der Entwicklung von Single-Core-CPUs ist es nicht mehr möglich, dem „Mooreschen Gesetz“ zu folgen (Moores Gesetz ist das Beobachtungsgesetz der Hardwareentwicklung, und es gibt auch ein „Anti-Mooresches Gesetz“, das auf „Moores Gesetz“ basiert), aber „ „Anti-Moore's Law“ ist ein Gesetz im Softwarebereich. Interessierte können sich selbst darüber informieren. Um die Rechengeschwindigkeit weiter zu verbessern, verfolgen Hardware-Ingenieure keine separaten Recheneinheiten mehr, sondern integrieren mehrere Recheneinheiten zusammen. Das soll eine Multi-Core-CPU bilden. In nur einem Dutzend Jahren können Heim-CPUs wie Intel i7 4 Kerne oder sogar 8 Kerne erreichen. Professionelle Server können in der Regel über mehrere unabhängige CPUs verfügen, wobei jede CPU sogar über bis zu 8 oder mehr Kerne verfügt.
Daher scheint das „Mooresche Gesetz“ weiterhin bei der CPU-Kernerweiterung anzutreffen. Im Zusammenhang mit Multi-Core-CPUs hat sich der Trend zur gleichzeitigen Programmierung herausgebildet. Gleichzeitige Programmierung kann die Rechenleistung von Multi-Core-CPUs maximieren und die Leistung verbessern.
Es eignet sich grundsätzlich für die gleichzeitige Programmierung in speziellen Geschäftsszenarien. Im Bereich der Bildverarbeitung enthält beispielsweise ein Bild mit 1024 x 768 Pixeln mehr als 786.000 Pixel. Es dauert lange, alle Pixel auf einer Seite zu durchlaufen. Angesichts einer so komplexen Berechnung ist es notwendig, die Rechenleistung von Multi-Cores voll auszunutzen.
Darüber hinaus können bei der Entwicklung einer Einkaufsplattform zur Verbesserung der Reaktionsgeschwindigkeit Vorgänge wie Aufteilung, Bestandsreduzierung, Auftragsgenerierung usw. aufgeteilt und mithilfe der Multithreading-Technologie abgeschlossen werden. Angesichts komplexer Geschäftsmodelle lassen sich parallele Programme besser an Geschäftsanforderungen anpassen als serielle Programme, und die gleichzeitige Programmierung entspricht dieser Geschäftsaufteilung. Gerade aufgrund dieser Vorteile kann die Multithreading-Technologie geschätzt werden ist auch das, was ein CS-Lernender beherrschen sollte:
● Nutzen Sie die Rechenleistung der Multi-Core-CPU voll aus
● Erleichtern Sie die Geschäftsaufteilung und verbessern Sie die Anwendungsleistung
Was sind die Nachteile der gleichzeitigen Programmierung?
1. Häufiger Kontextwechsel
Die Zeitspanne ist die Zeit, die die CPU jedem Thread zuweist. Da die Zeit sehr kurz ist, wechselt die CPU ständig den Thread Es gibt mehrere Threads. Sie werden gleichzeitig ausgeführt und die Zeitspanne beträgt im Allgemeinen mehrere zehn Millisekunden.
Jedes Mal, wenn Sie wechseln, müssen Sie den aktuellen Status speichern, damit Sie den vorherigen Status wiederherstellen können. Ein zu häufiges Umschalten nutzt die Multithread-Programmierung nicht aus. Im Allgemeinen kann der Kontextwechsel durch sperrenfreie gleichzeitige Programmierung, den CAS-Algorithmus, die Verwendung minimaler Threads und die Verwendung von Coroutinen reduziert werden.
Sperrenfreie gleichzeitige Programmierung: Sie können sich auf die Idee der Sperrsegmentierung von ConcurrentHashMap beziehen. Verschiedene Threads verarbeiten unterschiedliche Datensegmente, sodass unter der Bedingung des Multithread-Wettbewerbs die Kontextwechselzeit verkürzt werden kann reduziert.
Der CAS-Algorithmus verwendet den CAS-Algorithmus, um Daten atomar zu aktualisieren, und verwendet optimistisches Sperren, wodurch einige der Kontextwechsel, die durch unnötige Sperrkonkurrenz verursacht werden, wirksam reduziert werden können.
Verwenden Sie die wenigsten Threads: Vermeiden Sie unnötiges Erstellen Threads zum Beispiel gibt es nur wenige Aufgaben, aber es werden viele Threads erstellt, was dazu führt, dass sich eine große Anzahl von Threads im Wartezustand befindet
Coroutine: Realisieren Sie die Planung mehrerer Aufgaben in einem einzelnen Thread. und führen Sie die Planung mehrerer Aufgaben in einem einzelnen Thread durch. Behalten Sie den Wechsel zwischen mehreren Aufgaben im Thread bei
Da der Kontextwechsel ein relativ zeitaufwändiger Vorgang ist, gibt es im Buch „The Art of Concurrent Programming in Java“ ein Experiment, das möglicherweise nicht schneller ist als die serielle Akkumulation.
2. Thread-Sicherheitsprobleme
Das Problem der Thread-Sicherheit in kritischen Abschnitten ist, wenn Sie nicht vorsichtig sind , Systemfunktionen sind möglicherweise nicht mehr verfügbar.
Das obige ist der detaillierte Inhalt vonWas ist Java-Parallelität?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!