Heim >Java >javaLernprogramm >Was ist Parallelität in Java?
Parallelität und Parallelität
Parallelität: bezieht sich auf innerhalb eines bestimmten Zeitraums, Mehrere Aufgaben werden abwechselnd ausgeführt. 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.
Parallelität: bezieht sich auf die Fähigkeit, mehrere Aufgaben gleichzeitig zu erledigen. Wenn mehrere Threads ausgeführt werden, ist die Fähigkeit der CPU, Anforderungen von diesen Threads gleichzeitig zu verarbeiten, beeinträchtigt.
In einer gleichzeitigen Umgebung wird der Abschluss des Programms unterbrochen und die folgenden Merkmale treten auf:
1. 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.
2. Der Ausführungsprozess gleichzeitiger Programme ist intermittierend. Das Programm muss sich Anweisungen und Ausführungspunkte vor Ort merken.
3. Wenn die Anzahl der Parallelität 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.
Einführung in die Grundkonzepte von Threads
Threads und Prozesse
Prozesse: Jeder Prozess verfügt über einen unabhängigen Code- und Datenraum (Prozesskontext), das Umschalten zwischen Prozessen verursacht einen großen Overhead und ein Prozess enthält 1–n Threads. (Prozess ist die kleinste Einheit der Ressourcenzuweisung). Einfach ausgedrückt handelt es sich bei Prozessen um voneinander isolierte Programme, die in gewissem Maße unabhängig voneinander ablaufen.
Threads: Threads desselben Typs teilen sich Code und Datenraum. Jeder Thread verfügt über einen unabhängigen laufenden Stapel- und Programmzähler (PC), und der Thread-Umschaltaufwand ist gering. (Thread ist die kleinste Einheit der CPU-Planung)
Threads sind wie Prozesse in fünf Phasen unterteilt: Erstellung, Bereitschaft, Ausführung, Blockierung und Beendigung.
1. Ein neues Thread-Objekt wird erstellt, aber die start()-Methode wurde noch nicht aufgerufen. Beispiel: Thread thread = new Thread();
2. Bereit: Nachdem das Thread-Objekt erstellt wurde, rufen andere Threads (z. B. der Hauptthread) die start()-Methode des Objekts auf. Der Thread in diesem Zustand befindet sich im ausführbaren Thread-Pool und wartet darauf, von der Thread-Planung ausgewählt zu werden, um das Recht zur Nutzung der CPU zu erhalten.
3. Ausführen: Der Thread im laufenden Zustand (ausführbar) erhält die CPU-Zeitscheibe (Zeitscheibe) und führt den Programmcode aus.
4. Blockiert (Blockiert): Der Thread ist blockiert. Der Unterschied zwischen „Blockierter Zustand“ und „Wartezustand“ ist: „Blockierter Zustand“ wartet darauf, eine exklusive Sperre zu erhalten Tritt auf, wenn ein Thread die Sperre aufgibt und der „Wartezustand“ eine Zeit lang wartet oder eine Weckaktion stattfindet. Der Thread wechselt in diesen Zustand, während das Programm darauf wartet, den synchronisierten Bereich (synchronisiert) zu betreten.
(1). Warten auf Blockierung: Der laufende Thread führt die Methode o.wait() aus und die JVM stellt den Thread in die Warteschlange.
(2). Wenn ein laufender Thread die Synchronisationssperre eines Objekts erhält und die Synchronisationssperre von einem anderen Thread belegt ist, stellt die JVM den Thread in den Sperrpool.
(3). Andere Blockierung: Wenn der laufende Thread die Methode Thread.sleep(long ms) oder t.join() ausführt oder eine E/A-Anfrage ausgibt, setzt die JVM den Thread auf is im Sperrzustand. Wenn der Zustand „sleep()“ abläuft, wartet „join()“ auf die Beendigung oder Zeitüberschreitung des Threads oder auf den Abschluss der E/A-Verarbeitung, und der Thread kehrt in den ausführbaren Zustand zurück.
5. Warten: Der Thread, der diesen Status erreicht, muss darauf warten, dass andere Threads bestimmte Aktionen ausführen (Benachrichtigung oder Unterbrechung).
6. Blockierung: Wenn ein Thread versucht, eine interne Objektsperre (nicht-java.util.concurrent-Bibliothekssperre) zu erlangen und die Sperre von anderen Threads gehalten wird, wechselt der Thread in den Blockierungszustand.
7. Warten: Wenn ein Thread darauf wartet, dass ein anderer Thread den Scheduler über eine Bedingung benachrichtigt, wechselt der Thread in den Wartezustand. Rufen Sie beispielsweise Object.wait(), Thread.join() auf und warten Sie auf Lock oder Condition.
8. Timeout-Warten (TIMED_WAITING): Dieser Zustand unterscheidet sich von WAITING, er kann nach der angegebenen Zeit von selbst zurückkehren.
9. TERMINATED: Zeigt an, dass die Ausführung des Threads abgeschlossen ist.
Das obige ist der detaillierte Inhalt vonWas ist Parallelität in Java?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!