2017-05-21 7 views
0

Ich verstehe bereits, dass Forking und Joining für Multithreading verwendet werden, aber ich verstehe nicht, was genau passiert, wenn eine Aufgabe gegabelt wird. Führt die Verzweigung einer Aufgabe dazu, dass die gespaltene Task an den Anfang der Berechnungsmethode zurückkehrt? Oder macht die Aufgabe etwas anderes? Wenn ich möchte, dass eine Aufgabe zu einer anderen Methode als der Berechnung springt und diese bei der Verzweigung ausführt, wie würde ich dann sagen, dass sie das tun soll? Gibt es eine Art von Erweiterung zu (instance).fork();, die ich angeben kann, um dies zu spezifizieren?Was genau passiert, wenn eine Aufgabe gegabelt wird?

Antwort

0

Die Task, die das Fork/Join-Framework verwendet, ruft split rekursiv in kleinere Unteraufgaben auf, sodass sie gleichzeitig ausgeführt werden können. Durch Abzweigung kann jede Teilaufgabe von einer anderen CPU parallel oder von verschiedenen Threads auf derselben CPU ausgeführt werden. Nachdem die Ausführung aller Unteraufgaben beendet ist, beginnt der join-Teil. In diesem Prozess werden die Ergebnisse aller Unteraufgaben rekursiv zu einem einzigen Ergebnis zusammengefasst. Dieser ganze Prozess geschieht "hinter den Kulissen" und kann mit einem Thread-Pool namens ForkJoinPool implementiert werden, der Threads vom Typ ForkJoinWorkerThread verwaltet.

+0

Was passiert mit diesen Teilaufgaben, wenn die Aufgabe verzweigt ist? Beginnen sie sofort damit, eine andere Funktion auszuführen, oder müssen sie dazu aufgefordert werden, irgendetwas mit ihnen zu tun? Kannst du etwas ausführlicher erklären? – JKristol

+0

Bitte sehen Sie meine aktualisierte Antwort oben. –

+0

Können Sie ein Beispiel geben, wie diese einzelnen Threads ausgeführt werden können? Das verstehe ich noch nicht ganz. Ich versuche herauszufinden, wo im Code die gegabelten Threads liegen. Ich bin mir nicht sicher, ob die gegabelten Threads die Berechnungsmethode erneut starten oder ob sie solange untätig bleiben, bis sie aufgerufen werden. – JKristol

Verwandte Themen