Was ist Parallelität in Java? - Vollständiger Leitfaden zur Parallelität in Java

Inhaltsverzeichnis:

Anonim

Was ist Parallelität in Java?

In der heutigen Welt entwickelt sich alles rasant. In allem steckt immer Verbesserungspotenzial. So ist es auch mit unserer Programmiersprache. Heute erwarten wir mit unseren modernen Technologien, dass die Dinge einfach und schnell erledigt werden können. Um mehrere Dinge gleichzeitig zu tun oder um mehrere Dinge gleichzeitig zu tun, entstand das Konzept der Parallelität. Was ist eigentlich Nebenläufigkeit, was ist ihre Verwendung, warum wird dies wirklich benötigt und vieles mehr. Wir werden versuchen, solche Fragen zu berühren und sie nacheinander in diesem Artikel zu beantworten. Lassen Sie uns deshalb unsere Diskussion auf einen sehr grundlegenden Abschnitt konzentrieren, der die Definition der Nebenläufigkeit ist. In diesem Thema erfahren Sie, was Parallelität in Java ist.

Definition von Parallelität?

Was ist eigentlich Parallelität? Um das zu beantworten, nehmen wir ein gemeinsames Szenario. Angenommen, während Sie diesen Artikel lesen, versuchen Sie, mehrere Dinge gleichzeitig zu tun. Möglicherweise versuchen Sie auch, eine Notiz zu machen. Vielleicht versuchen Sie, sie zu verstehen oder über etwas nachzudenken. In einfachen Worten, Sie versuchen mehrere Dinge gleichzeitig zu tun. Dies ist, was eine Nebenläufigkeit bedeutet. Parallelität führt einfach mehrere Aufgaben parallel zueinander aus. In diesem Artikel wird die Parallelität im Rahmen von Java als Programmiersprache erläutert.

Tatsächlich ist es in Java oder allgemein in jeder Programmiersprache der Thread, der für den Transport der Parallelität verantwortlich ist. Die Hauptaufgabe dieser Threads besteht darin, die parallele Ausführung von Aufgaben zu erleichtern. Lassen Sie uns in der Zwischenzeit eine grundlegende Definition von Thread haben.

Was ist ein Thread?

Ein Thread ist ein einfacher Prozess mit einem eigenen Aufrufstapel. Ein Thread hat jedoch die Berechtigung, auf freigegebene Daten von anderen Threads zuzugreifen, die unter demselben Prozess ausgeführt werden. In einer Java-Anwendung können wir viele Threads verwenden, um Parallelverarbeitung oder Parallelität zu erreichen.

Kommen wir nun zu unserem nächsten Thema:

Parallelität in der Java-Definition?

In Java oder einer anderen Programmiersprache wie C # usw. hat jede OOP-Sprache ein Threading-Konzept. In Java gibt es verschiedene Prozesse, die ausgeführt werden, indem unterschiedliche Threads erstellt werden, um eine Parallelität zu erzielen

Lassen Sie uns also nach dieser einfachen Definition unser neues Thema diskutieren:

Was macht Java-Anwendung gleichzeitig?

Die erste Klasse, die benötigt wird, um eine Java-Anwendung gleichzeitig auszuführen, ist die Klasse java.lang.Thread. Die Klasse java.lang.Thread ist für alle Parallelitätskonzepte in der Programmiersprache Java verantwortlich. Danach haben wir die java.lang.Runnable-Schnittstelle, um das Thread-Verhalten aus der Thread-Klasse zu abstrahieren.

Eine andere Klasse, die wir zum Erstellen einer erweiterten Anwendung benötigen, wird aus dem in Java 1.5 hinzugefügten Paket java.util.concurrent verwendet.

Damit haben wir eine neue Frage erreicht:

Ist Java Concurrency wirklich so einfach?

Wie es scheint, ist das Implementieren von Parallelität in Java ziemlich einfach. Es ist jedoch wirklich nicht so. Lasst uns dafür sorgen.

Unsere obige Diskussion vermittelt im Allgemeinen den Eindruck, dass Parallelität in der Tat ein einfaches, gutes Konzept ist und recht einfach zu implementieren ist. Wenn wir besser überwachen und versuchen, es zu verstehen, müssen wir ein gutes Verständnis der Grundkonzepte sowie ein gründliches Verständnis dessen haben, was wir erreichen müssen.

Wenn wir gleichzeitige Anwendungen und eine einzelne Thread-Anwendung vergleichen, stellen wir im Allgemeinen fest, dass eine gleichzeitige Anwendung hinsichtlich des Entwurfs und des Verständnisses komplex ist. Code, der von mehreren Threads ausgeführt wird, erfordert besondere Aufmerksamkeit und Ressourcen für den Zugriff auf gemeinsam genutzte Daten. Fehler, die aufgrund einer inkorrekten Thread-Synchronisation auftreten, sind schwer zu debuggen und zu beheben. Außerdem werden diese Fehler in den meisten Szenarien in der Anfangsphase nicht erkannt. Sie werden sogar im Produktmodus erkannt, der noch schwerer zu reproduzieren ist.

Neben Fehlern und allgemeinen Defekten benötigen gleichzeitige Threads mehr Ressourcen, um die Anwendung auszuführen

Probleme und Verbesserung der Parallelität - Erläuterung mit Beispiel

Grundsätzlich gibt es also zwei Arten von Problemen, die aufgrund von Parallelität auftreten. Diese Probleme lassen sich grob in zwei Kategorien einteilen

  • Thread-Interferenzfehler
  • Fehler bei der Speicherkonsistenz

Lassen Sie uns jeden nach dem anderen verstehen

Thread-Interferenzfehler - Lassen Sie uns anhand eines einfachen Beispiels verstehen.

Angenommen, wir haben eine Zählerfunktion, deren Hauptaufgabe darin besteht, den Zähler oder die Zählung einer Zahl zu erhöhen. Angenommen, wir haben zwei Threads, Thread A und Thread B. Angenommen, Thread A liest den Anfangswert als 0. Die folgenden Schritte werden nun nacheinander ausgeführt.

  1. Thread A liest den Anfangswert als 0
  2. Thread B liest den Anfangswert als 0
  3. Thread A erhöht den Wert um 1. Der neue Wert ist jetzt 1
  4. Thread B auch parallel erhöhen Sie den Wert auf 1.
  5. Thread A schreibt den aktualisierten Wert 1 in die Speicherzelle
  6. Thread B wiederholt auch denselben Schritt, der in den aktualisierten Speicherzellenwert 1 geschrieben wird

Hier tritt also das Problem auf. Bei zwei Threads A und B wird der Code zweimal ausgeführt, und der erwartete Wert ist 2, was sich jedoch in 1 niederschlägt. Dies ist das Hauptproblem, das durch mehrere Threads verursacht werden kann

Wie könnte das gelöst werden?

Thread-Interferenzfehler können durch Synchronisieren des Zugriffs auf gemeinsam genutzte Variablen behoben werden. Wir müssen für die aktualisierten Werte zwischen den gemeinsam genutzten Daten synchron bleiben

Wenden wir uns damit der zweiten Art von Fehlern zu

Fehler bei der Speicherkonsistenz

Speicherinkonsistenzfehler treten im Allgemeinen auf, wenn verschiedene Threads versuchen, ein und dasselbe Datenelement zu lesen oder inkonsistente Ansichten zu haben. Dies geschieht normalerweise, wenn der erste Thread einige gemeinsam genutzte Daten aktualisiert und dieser aktualisierte Wert nicht an den zweiten oder andere Threads weitergegeben wird und diese alte Daten lesen.

Mal sehen, warum das passiert?

Nun, dafür kann es viele Ursachen geben. In der Regel nimmt der Compiler zahlreiche Optimierungen an der Anwendung vor, um die Leistung zu verbessern. Es kann auch Anweisungssequenzen aktualisieren, um die Leistung zu optimieren. Selbst im Allgemeinen versuchen Prozessoren auch, Codes zu optimieren. Beispielsweise könnte eine CPU den aktuellen Wert einer Variablen aus einem Cache-Speicher oder einem temporären Register anstelle des Hauptspeichers lesen

Fazit - Was ist Parallelität in Java?

Parallelität ist ein sehr wichtiges Merkmal jeder OOP-Sprache. Durch das Threading können mehrere Prozesse parallel ausgeführt werden. Es hilft uns, unsere komplexe Aufgabe schneller auszuführen. Mit den Vorteilen hat die Nebenläufigkeit jedoch auch einige Nachteile. Die Verwendung von Threading führt zu einem hohen Ressourcenverbrauch

Empfohlene Artikel

Dies war ein Leitfaden für die Parallelität in Java. Hier haben wir die Probleme und Verbesserungen in der Parallelität mit einem Beispiel besprochen. Sie können auch unsere anderen Artikelvorschläge durchgehen, um mehr zu erfahren -

  1. Was ist Multithreading in Java?
  2. Wie verbinde ich eine Datenbank in Java?
  3. Was ist Multithreading in Java?
  4. Was ist J2EE?