Unterschied zwischen kooperativ und präventiv erklärt von Laurent Esnault auf dem 4D Summit 2016

Automatisch übersetzt von Deepl

Laurent Esnault, VP of Engineering, erklärt den Unterschied zwischen kooperativen und präemptiven Prozessen während seiner Break Out Session über Preemptive Multi-Threading auf dem 4D Summit 2016. Dank Preemptive Multi-Threading können Sie mehr parallele Prozesse haben und somit mehr und mehr Benutzer hinzufügen, entweder für Desktop- oder für Web-Anwendungen.

Wenn Sie Laurents Vortrag auf dem 4D Summit 2016 verpasst haben, sehen Sie sich dieses Video an und lassen Sie sich vom Meister des Preemptive Multi-Threading persönlich schulen!

Der Unterschied zwischen kooperativ und präemptiv

Was ist nun kooperativ und was ist präemptiv?

Der kooperative Modus ist in der Regel das, was Sie heute mit Ihren 4D Prozessen verwenden. Kooperativ bedeutet, dass die 4D Prozesse kooperieren (zusammenarbeiten), um sich eine einzige CPU zu teilen. Manchmal kooperieren sie explizit, z. B. wenn Sie den Befehl IDLE verwenden, und manchmal kooperieren sie implizit, z. B. wenn Sie die meisten anderen 4D Sprachbefehle verwenden. Das liegt daran, dass 4D intern den IDLE-Befehl verwendet, um die CPU an einen anderen Prozess zu übergeben. Infolgedessen kann immer nur ein CPU-Kern gleichzeitig verwendet werden.

Natürlich kennen Sie alle die 4D Prozesse, die Sie heute verwenden. Und es liegt nahe, diese Prozesse für den Zugriff auf die Benutzeroberfläche zu verwenden. Sie können ein Fenster öffnen, ein Dialogfeld oder ein Formular anzeigen lassen, usw. Aber eigentlich ist das für ein Betriebssystem überhaupt nicht natürlich. Die meisten Betriebssysteme verbieten den Zugriff auf die Benutzer oberfläche von einem anderen Thread als dem Hauptthread. Aber für kooperative Prozesse verwaltet 4D intern den Zugriff auf die Benutzeroberfläche… sogar in einem sekundären Thread.

Im präemptiven Modus müssen Sie den IDLE-Befehl nicht aufrufen, da die 4D Prozesse nicht kooperieren müssen, um sich die CPU zu teilen: Das Betriebssystem erledigt das. Das Betriebssystem gibt die CPU präemptiv an den einen oder anderen Thread ab. Wenn Sie also mehrere CPUs in Ihrem Rechner haben, können mehrere Threads gleichzeitig ausgeführt werden. Der Vorteil ist also, dass Sie alle Kerne Ihres Rechners nutzen können. Von einem präemptiven Thread aus können Sie jedoch nicht auf die Benutzeroberfläche zugreifen.

blank

Sie können sehen, wie im kooperativen Modus die Prozesse nacheinander ausgeführt werden und nur eine einzige CPU verwenden, während das Betriebssystem im präemptiven Modus die beiden Prozesse auf alle CPUs verteilt (im gezeigten Beispiel sowohl auf CPU 1 als auch auf CPU 2).

Der Vorteil liegt auf der Hand. Die globale Ausführungszeit ist im präemptiven Modus kürzer, wenn Sie zwei CPUs haben. Auch wenn die Ausführungszeit jedes einzelnen Prozesses die gleiche ist. Das präemptive Scheduling führt nicht zu einem Leistungsgewinn bei der Ausführungszeit eines Prozesses. Es ist die globale Ausführungszeit mehrerer Aufgaben, die in mehreren Prozessen laufen, die reduziert wird.

Demonstration

Hier ist eine sehr einfache Demonstration. Jede Schaltfläche erzeugt vier einzelne Prozesse.

blank

Die erste Schaltfläche erzeugt vier kooperative Prozesse, die einige unsinnige Berechnungen durchführen (ausschließlich zu Demonstrationszwecken). Die globale Ausführungszeit beträgt 643 Ticks, und die Ausführungszeit jedes einzelnen Prozesses beträgt etwa 150 Ticks. Im Grunde genommen ist die globale Ausführungszeit also nur die Addition der vier individuellen Ausführungszeiten.

Wenn wir dieselbe Berechnung in vier präemptiven Threads durchführen, werden Sie feststellen, dass die Ausführungszeit der einzelnen Prozesse ungefähr gleich ist (150 Ticks), die globale Ausführungszeit jedoch VIER MAL kürzer ist.

Die Beispieldatenbank, die für die Demonstration verwendet wurde, sowie ergänzende Erklärungen finden Sie in Vanessas Beitrag über präemptive Prozesse.