Heim  >  Artikel  >  Backend-Entwicklung  >  Golang-Kontextwechsel

Golang-Kontextwechsel

WBOY
WBOYnach vorne
2024-02-06 09:10:08817Durchsuche

Golang 上下文切换

Frageninhalt

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?


Richtige Antwort


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:

proc.go im Golang-Quellcode

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!

Stellungnahme:
Dieser Artikel ist reproduziert unter:stackoverflow.com. Bei Verstößen wenden Sie sich bitte an admin@php.cn löschen