Heim >Backend-Entwicklung >Golang >Wie implementiert Golang Coroutinen?
Wie implementiert Golang Coroutinen?
Golangs Methode zur Implementierung von Coroutinen:
Gleichzeitige Programmierung kann durch Prozesse, Threads und IO-Multiplexing implementiert werden. (Wir unterscheiden hier nicht zwischen Parallelität und Parallelität. Wenn es sich bei der CPU um eine Multi-Core-CPU handelt, kann sie auf mehreren Kernen gleichzeitig ausgeführt werden, was wir als Parallelität bezeichnen. Wenn es sich um eine Single-Core-CPU handelt, muss sie in die Warteschlange gestellt werden Schalter, wir nennen es Parallelität.)
Prozesse sind Computerressourcen Die kleinste Zuordnungseinheit, der Prozess ist eine Abstraktion von Prozessorressourcen und virtuellem Speicher (1), während virtueller Speicher eine Abstraktion von Hauptspeicherressourcen und ist Dateien (2), und Dateien sind eine Abstraktion von E/A-Geräten. Threads sind die kleinste Einheit der Computerplanung und teilen Computerressourcen, die von demselben Prozess zugewiesen wurden.
Das Obige ist ein tiefgreifendes Verständnis von Computersystemen.
Zusammenfassend lässt sich sagen, dass Threads die Parallelität tatsächlich implementieren. Erstens verfügt jeder Prozess über einen Hauptthread, da ein Thread die kleinste Planungseinheit ist. Sie können jedoch auch mehrere weitere Threads erstellen, wenn Sie dies tun Führen Sie Thread A aus, wechseln Sie dann zu Thread B und der Kernel-Aufruf beginnt. Die CPU muss den Kontext von Thread A beibehalten, dann zu Thread B wechseln und dann die Steuerung an die Planung Ihrer Anwendungsebene übergeben. Beim Prozesswechsel muss auch der Kernel umgeschaltet werden, da der Hauptthread des C-Prozesses auf den Hauptthread des D-Prozesses umgeschaltet wird.
Dann müssen Prozesse kommunizieren und ihre Ressourcen werden nicht gemeinsam genutzt. Zu den häufig verwendeten gehören Semaphoren und gemeinsam genutzter Speicher Tatsächlich sagt Baidu, dass es sechs Typen gibt und dass mehrere Threads desselben Prozesses Ressourcen gemeinsam nutzen und viel einfacher zu kommunizieren sind als Prozesse. Viele Programmiersprachen wie Java verfügen nun über diese Art der Thread-Interaktion Durchführung.
Was IO-Multiplexing betrifft, bedeutet es tatsächlich, eine Warteschlange zu verwalten und dann einen Thread oder mehrere Threads in die Warteschlange zu lassen, um Aufgaben abzuschließen. Warum? Da die Anzahl der Threads begrenzt ist und die Kommunikation zwischen Threads einige Ressourcen erfordert, muss der Kernel häufig den Kontext wechseln.
Das E/A-Multiplexing eines Threads, typischerweise Redis und Nodejs, erfordert überhaupt keinen Kontextwechsel, ein Thread kann die Welt dominieren. Das IP-Multiplexing mehrerer Threads ist die Implementierungsmethode der Golang-Coroutine. Die Coroutine verwaltet die Threads selbst, steuert die Threads auf eine bestimmte Anzahl und erstellt dann eine Regelzustandsmaschine, um Aufgaben zu planen.
Empfohlenes Tutorial: „Gehe zum Sprachtutorial“
Das obige ist der detaillierte Inhalt vonWie implementiert Golang Coroutinen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!