Ich habe eine ganz grundlegende Frage: Kann der Betriebssystem-Scheduler-Kontext zwischen Threads auf Benutzerebene wechseln, die der Kernel-Ebene zugeordnet sind?
Angenommen, der Goscheduler plant eine Goroutine A im Kernel-Thread. Jetzt führt Goroutine A einen Sysblock-Aufruf durch. Wer wechselt zuerst den Kontext: das Betriebssystem oder der Go-Scheduler?
Der Go-Scheduler verwaltet Goroutinen, die in Threads auf Betriebssystemebene wiederverwendet werden. Der Go-Scheduler kann effizient Kontextwechsel zwischen Goroutinen durchführen, beispielsweise wenn eine Goroutine einen blockierenden Systemaufruf durchführt, ohne den Betriebssystem-Scheduler einzubeziehen. Es ist jedoch wichtig zu beachten, dass der Betriebssystem-Scheduler aufgrund von Faktoren wie der Zeitaufteilung unabhängig voneinander Unterbrechungen und Kontextwechsel durchführen kann. Daher kann der genaue Zeitpunkt eines Kontextwechsels und die Beteiligung des Betriebssystem-Schedulers aus Sicht des Go-Programms möglicherweise nicht genau bestimmt werden.
Weiterführende Literatur:
Go Scheduler: Implementierung einer leichten Parallelitätssprache
Das obige ist der detaillierte Inhalt vonGolang-Kontextwechsel. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!