Inhaltsverzeichnis
Vor Go1.1 war das Planungsmodell von Go eigentlich das GM-Modell, das heißt, es gab kein P. " >Vor Go1.1 war das Planungsmodell von Go eigentlich das GM-Modell, das heißt, es gab kein P.
„GMP-Modell, warum gibt es P?“ Diese Frage ist wie ein Systemdesign-Verständnis, denn jetzt werden sich viele Leute das GMP-Modell merken oder es sofort durchgehen, um das Interview zu bewältigen. Und wir müssen lernen und verstehen, die wahren Gründe dafür zu verstehen. " > „GMP-Modell, warum gibt es P?“ Diese Frage ist wie ein Systemdesign-Verständnis, denn jetzt werden sich viele Leute das GMP-Modell merken oder es sofort durchgehen, um das Interview zu bewältigen. Und wir müssen lernen und verstehen, die wahren Gründe dafür zu verstehen.
Heim Backend-Entwicklung Golang Auf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P?

Auf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P?

Aug 08, 2023 pm 04:31 PM
gmp


Der heutige Protagonist ist eine Erweiterungsfrage (Frage) der Allzweck-GMP-Modellfrage im Go-Interview, nämlich „GMP-Modell, warum braucht es P?“

Weitere Einblicke in den Hintergrund Der Kern der Frage besteht in diesem Interview darin, zu fragen: „Warum können G und M im GMP-Modell nicht direkt gebunden werden? Das ist so problematisch. Warum ist es so problematisch? Welches Problem ist das?“ Versuchen Sie es zu lösen?

GM-Modell

Vor Go1.1 war das Planungsmodell von Go eigentlich das GM-Modell, das heißt, es gab kein P.

Heute nehme ich Sie mit, um frühere Designs zu begutachten.

Den Go1.0-Quellcode entschlüsseln

Eine Möglichkeit für uns, etwas zu verstehen, besteht darin, einen Blick auf die wichtigsten Schlüsselschritte des Go1.0.1-Scheduler-Quellcodes zu werfen Jianyu:
static void
schedule(G *gp)
{
 ...
 schedlock();
 if(gp != nil) {
  ...
  switch(gp->status){
  case Grunnable:
  case Gdead:
   // Shouldn't have been running!
   runtime·throw("bad gp->status in sched");
  case Grunning:
   gp->status = Grunnable;
   gput(gp);
   break;
  }

 gp = nextgandunlock();
 gp->readyonstop = 0;
 gp->status = Grunning;
 m->curg = gp;
 gp->m = m;
 ...
 runtime·gogo(&gp->sched, 0);
}
Nach dem Login kopieren
  • Callschedlock 方法来获取全局锁。
  • 获取全局锁成功后,将当前 Goroutine 状态从 Running(正在被调度) 状态修改为 Runnable(可以被调度)状态。
  • 调用 gput 方法来保存当前 Goroutine 的运行状态等信息,以便于后续的使用。
  • 调用 nextgandunlock 方法来寻找下一个可运行 Goroutine,并且释放全局锁给其他调度使用。
  • 获取到下一个待运行的 Goroutine 后,将其运行状态修改为 Running。
  • 调用 runtime·gogo
Nachdem Sie die globale Sperre erfolgreich erworben haben, ändern Sie den aktuellen Goroutine-Status von „Läuft“ (wird geplant) in den Status „Ausführbar“ (kann geplant werden).

Call CallAuf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P?
Nachdem Sie die nächste auszuführende Goroutine erhalten haben, ändern Sie ihren Ausführungsstatus in „Läuft“.

CallWenn wir über das GM-Modell nachdenken

Durch die Analyse des Scheduler-Quellcodes von Go1.0.1 können wir einen interessanten Punkt finden. Das ist der Scheduler selbst (Schedule-Methode), der bei normalen Prozessen nicht zurückkehrt, das heißt, er beendet den Hauptprozess nicht.

🎜🎜🎜G-M-Modelldiagramm🎜🎜🎜 Nachdem GoroutineA abgeschlossen ist, beginnt es mit der Suche nach GoroutineB. Wenn B gefunden wird, wird das abgeschlossene Planungsrecht von A an B übergeben beginnt mit dem Scheduling, also dem Laufen. 🎜🎜Natürlich gibt es auch Gs, die blockiert (Blocked) sind. Angenommen, G führt einige System- oder Netzwerkaufrufe durch, die dazu führen, dass G ins Stocken gerät. Zu diesem Zeitpunkt wird M (System-Thread) wieder in die Kernel-Warteschlange gestellt und wartet auf eine neue Aktivierungsrunde. 🎜🎜🎜🎜Nachteile des GM-Modells🎜🎜🎜🎜Oberflächlich betrachtet scheint das GM-Modell unzerstörbar und makellos zu sein. Aber warum sollte man es ändern? 🎜🎜Im Jahr 2012 veröffentlichte Dmitry Vyukov den Artikel „Scalable Go Scheduler Design Doc“, der immer noch das Hauptziel wichtiger Forschungsartikel zum Go Scheduler ist. Er beschrieb die allgemeinen Gründe und Überlegungen im Artikel . 🎜

Der aktuelle Goroutine-Scheduler (bezogen auf das GM-Modell von Go 1.0) schränkt die Skalierbarkeit gleichzeitiger, in Go geschriebener Programme ein, insbesondere Server mit hohem Durchsatz und parallele Rechenprogramme.

Die Implementierung weist die folgenden Probleme auf:

  • Es gibt einen einzigen globalen Mutex (Sched.Lock) und eine zentralisierte Zustandsverwaltung:
    • Mutex muss alle Goroutine-bezogenen Vorgänge (Erstellung, Vervollständigung, Neuordnung, usw.), was zu einem ernsthaften Wettbewerb um Schlösser führt.
  • Probleme bei der Bereitstellung von Goroutinen:
    • Übergabe von Goroutinen (G) (G.nextg): Ausführbare Goroutinen werden häufig zwischen Arbeitsthreads (Ms) übergeben.
    • Das oben Genannte kann zu erhöhter Latenz und zusätzlichem Overhead führen. Jedes M muss in der Lage sein, jedes ausführbare G auszuführen, insbesondere das M, das gerade G erstellt hat.
  • Jedes M muss im Speicher (M.mcache) zwischengespeichert werden:
    • führt zu einem übermäßigen Ressourcenverbrauch (jeder Mcache kann 2 MB Speichercache und andere Caches aufnehmen) und einer schlechten Datenlokalität.
  • Häufiges Blockieren/Entsperren von Threads:
    • Threads werden häufig blockiert und entsperrt, wenn Systemaufrufe vorhanden sind. Dies führt zu einem erheblichen zusätzlichen Leistungsaufwand.

GMP-Modell

Um viele der oben genannten Probleme des GM-Modells zu lösen, fügte Dmitry Vyukov in Go1.1 eine neue P-Komponente (Prozessor) basierend auf dem GM-Modell hinzu. Und den Work Stealing-Algorithmus implementiert, um einige neu entstandene Probleme zu lösen.

Auf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P?

GMP-Modell, im vorherigen Artikel „Go-Gruppe“ fragten Freunde: Wie viele Goroutinen sollten angemessen gesteuert werden? Wird sich dies auf GC und Planung auswirken? wurde in „“ erklärt.

Freunde, die es gut finden, können darauf achten, ich werde es hier nicht wiederholen.

Welche Änderungen wird es mit sich bringen

Welche Veränderungen wird es mit sich bringen, nachdem P hinzugefügt wurde? Lassen Sie uns ausführlicher darüber sprechen.

  • Jedes P verfügt über eine eigene lokale Warteschlange, wodurch die direkte Abhängigkeit von der globalen Warteschlange erheblich verringert wird. Das Ergebnis ist eine Verringerung des Sperrwettbewerbs. Der Großteil des Leistungsaufwands des GM-Modells ist auf die Sperrkonkurrenz zurückzuführen.

  • Auf der relativen Bilanz jedes P wird der Work Stealing-Algorithmus auch im GMP-Modell implementiert. Wenn die lokale Warteschlange von P leer ist, wird das ausführbare G aus der globalen Warteschlange oder der lokalen Warteschlange von gestohlen andere P zu betreiben, was den Leerlauf reduziert und die Ressourcennutzung verbessert.

Warum gibt es P?? Für M können ähnliche Funktionen erreicht werden .

Warum eine weitere P-Komponente hinzufügen?

In Kombination mit der Positionierung von M (Systemgewinde) treten in diesem Fall die folgenden Probleme auf.

Im Allgemeinen ist die Anzahl von M größer als die von P. Wie in Go beträgt die maximale Anzahl von M 10.000, und die Standardanzahl von P ist die Anzahl der CPU-Kerne. Darüber hinaus steigt M aufgrund der Eigenschaften von M weiter an, wenn es einen Systemblockierungsaufruf gibt, der M blockiert und nicht ausreicht.

  • Wenn M weiter zunimmt und die lokale Warteschlange auf M gemountet ist, bedeutet dies, dass auch die lokale Warteschlange entsprechend zunimmt. Dies ist offensichtlich unvernünftig, da die Verwaltung lokaler Warteschlangen kompliziert wird und die Leistung von Work Stealing erheblich verringert wird.

  • M Nach der Blockierung durch einen Systemaufruf hoffen wir, die nicht ausgeführten Aufgaben anderen zuweisen zu können, damit sie weiter ausgeführt werden können, anstatt alles zum Stoppen zu bringen, sobald es blockiert wird.

  • Daher ist die Verwendung von M unvernünftig. Dann kann die Einführung einer neuen Komponente P und die Zuordnung der lokalen Warteschlange zu P dieses Problem sehr gut lösen.

Zusammenfassung

Der heutige Artikel kombiniert einige historische Situationen, Ursachenanalysen und Lösungsbeschreibungen des gesamten Go-Sprachplaners.

„GMP-Modell, warum gibt es P?“ Diese Frage ist wie ein Systemdesign-Verständnis, denn jetzt werden sich viele Leute das GMP-Modell merken oder es sofort durchgehen, um das Interview zu bewältigen. Und wir müssen lernen und verstehen, die wahren Gründe dafür zu verstehen.

Nur wenn Sie wissen, was passiert und warum es passiert, können Sie die Situation durchbrechen.

Das obige ist der detaillierte Inhalt vonAuf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Wie man mit PHP und GMP RSA-Verschlüsselungs- und Entschlüsselungsalgorithmen für große Ganzzahlen durchführt Wie man mit PHP und GMP RSA-Verschlüsselungs- und Entschlüsselungsalgorithmen für große Ganzzahlen durchführt Jul 28, 2023 pm 05:25 PM

So verwenden Sie PHP und GMP zur Durchführung des RSA-Verschlüsselungs- und Entschlüsselungsalgorithmus für große Ganzzahlen. Der RSA-Verschlüsselungsalgorithmus ist ein asymmetrischer Verschlüsselungsalgorithmus, der im Bereich der Datensicherheit weit verbreitet ist. Es implementiert den Prozess der Verschlüsselung mit öffentlichem Schlüssel und der Entschlüsselung mit privatem Schlüssel auf der Grundlage zweier besonders großer Primzahlen und einiger einfacher mathematischer Operationen. In der PHP-Sprache kann die Berechnung großer Ganzzahlen über die GMP-Bibliothek (GNUMultiplePrecision) realisiert werden, und die Verschlüsselungs- und Entschlüsselungsfunktionen können durch die Kombination des RSA-Algorithmus realisiert werden. In diesem Artikel wird die Verwendung von PHP- und GMP-Bibliotheken vorgestellt

Auf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P? Auf Wiedersehen, Go-Interviewer: GMP-Modell, warum gibt es P? Aug 08, 2023 pm 04:31 PM

„Warum gibt es P im GMP-Modell?“ Diese Frage ist wie ein Systemdesign-Verständnis, denn jetzt werden sich viele Leute das GMP-Modell merken oder es sofort durchgehen, um mit dem Interview fertig zu werden. Und wir müssen lernen und verstehen, die wahren Gründe dafür zu verstehen.

So kompilieren und installieren Sie PHP GMP So kompilieren und installieren Sie PHP GMP Nov 08, 2022 am 09:35 AM

So kompilieren und installieren Sie PHP GMP: 1. Dekomprimieren Sie das PHP-Paket über „bzip2 -d gcc-4.1.0.tar.bz2“. 2. Führen Sie „tar -xvf gcc-4.1.0.tar“ oder „tar -xvf“ aus *.tar“-Befehl; 3. Installieren Sie gmp über „make install“.

So implementieren Sie eine schnelle Multiplikation großer Zahlen mit PHP und GMP So implementieren Sie eine schnelle Multiplikation großer Zahlen mit PHP und GMP Jul 31, 2023 pm 01:31 PM

So implementieren Sie mit PHP und GMP eine schnelle Multiplikation großer Zahlen. Einführung: In der Informatik ist die Ganzzahlarithmetik eine der grundlegendsten und am häufigsten verwendeten Operationen. Wenn es sich jedoch um große ganze Zahlen handelt, werden herkömmliche arithmetische Methoden ineffizient. In diesem Artikel wird die Verwendung der GMP-Bibliothek (GNUMultiplePrecision) in PHP zur Implementierung einer schnellen Multiplikation großer Zahlen vorgestellt und entsprechende Codebeispiele bereitgestellt. Einführung in die GMP-Bibliothek Die GMP-Bibliothek ist eine hochpräzise Berechnungsbibliothek, die Funktionen wie Addition, Subtraktion, Multiplikation, Division und Potenzierung großer Ganzzahlen bereitstellt.

So implementieren Sie RSA-Verschlüsselungs- und Entschlüsselungsalgorithmen mit PHP und GMP So implementieren Sie RSA-Verschlüsselungs- und Entschlüsselungsalgorithmen mit PHP und GMP Jul 28, 2023 pm 11:54 PM

Verwendung von PHP und GMP zur Implementierung des RSA-Verschlüsselungs- und Entschlüsselungsalgorithmus Der RSA-Verschlüsselungsalgorithmus ist ein asymmetrischer Verschlüsselungsalgorithmus, der im Bereich der Informationssicherheit weit verbreitet ist. In praktischen Anwendungen ist es häufig erforderlich, Programmiersprachen zu verwenden, um RSA-Verschlüsselungs- und Entschlüsselungsalgorithmen zu implementieren. PHP ist eine häufig verwendete serverseitige Skriptsprache und GMP (GNUMultiplePrecision) ist eine hochpräzise mathematische Berechnungsbibliothek, die uns dabei helfen kann, eine große Anzahl von Operationen durchzuführen, die im RSA-Algorithmus erforderlich sind. In diesem Artikel wird die Verwendung von PHP und GMP vorgestellt

So generieren Sie große Primzahlen mit PHP und GMP So generieren Sie große Primzahlen mit PHP und GMP Aug 01, 2023 pm 01:37 PM

So generieren Sie große Primzahlen mit PHP und GMP Einführung: Im Bereich Kryptographie und Sicherheit ist die zufällige Generierung großer Primzahlen sehr wichtig. Die GMP-Erweiterung (GNUMultiplePrecision) von PHP bietet hochpräzise Berechnungsfunktionen, mit denen wir die benötigten großen Primzahlen generieren können. In diesem Artikel wird die Generierung großer Primzahlen mit PHP und GMP vorgestellt und entsprechende Codebeispiele bereitgestellt. Schritt 1: Installieren Sie die GMP-Erweiterung. Zuerst müssen wir sicherstellen, dass die GMP-Erweiterung auf dem Server installiert und aktiviert ist. Dies kann wie folgt erfolgen

Von Anfang bis Ende: So verwenden Sie die PHP-Erweiterung GMP für Operationen mit großer Anzahl Von Anfang bis Ende: So verwenden Sie die PHP-Erweiterung GMP für Operationen mit großer Anzahl Aug 02, 2023 am 11:33 AM

Von Anfang bis Ende: So erweitern Sie GMP mit PHP für Operationen mit großen Zahlen. Mit der Entwicklung des Internets ist die Verarbeitung großer Datenmengen zu einem unverzichtbaren Bestandteil unserer täglichen Entwicklung geworden. In vielen Szenarien müssen wir mit Zahlen operieren, die größer als der Ganzzahlbereich von PHP sind (-2^31-1 bis 2^31-1). In diesem Fall ist die GMP-Erweiterung von PHP hilfreich. GMP (GNUMultiplePrecisionArithmeticLibrary) ist eine

PHP- und GMP-Tutorial: So berechnen Sie das kleinste gemeinsame Vielfache einer großen Zahl PHP- und GMP-Tutorial: So berechnen Sie das kleinste gemeinsame Vielfache einer großen Zahl Jul 28, 2023 pm 11:51 PM

PHP- und GMP-Tutorial: So berechnen Sie das kleinste gemeinsame Vielfache großer Zahlen. Einführung: In Computern müssen wir uns häufig mit Operationen großer Zahlen befassen. Aufgrund der Speicherbeschränkungen des Computers können herkömmliche Ganzzahltypen jedoch keine Zahlen verarbeiten, die über einen bestimmten Bereich hinausgehen. Um dieses Problem zu lösen, können wir die GMP-Bibliothek (GNUMultiplePrecision) von PHP verwenden, um eine große Anzahl von Operationen auszuführen. In diesem Artikel wird erläutert, wie Sie mit PHP und der GMP-Bibliothek das kleinste gemeinsame Vielfache zweier großer Zahlen berechnen. Was ist das kleinste gemeinsame Vielfache? jüngster Mann

See all articles