Blockiert time.Sleep Goroutinen?
In Go besteht ein häufiges Missverständnis darin, dass time.Sleep Goroutinen blockiert, was zu Bedenken hinsichtlich übermäßiger Aktivität führt Thread-Erstellung.
Go verstehen Scheduler
Go verwendet einen Multiple Producer, Single Consumer (MPG)-Scheduler, bei dem eine begrenzte Anzahl von Threads namens M Jobs aus einer Warteschlange teilen, die von Ps (Worker-Goroutinen) bedient wird. Wenn ein M inaktiv ist, nimmt es einen Job aus der Warteschlange und führt ihn aus.
Blockiert time.Sleep wirklich Goroutinen?
Ja, time.Sleep blockiert Goroutinen in dem Sinne, dass es die weitere Ausführung der aktuellen Goroutine während der Ruhephase verhindert.
Warum begrenzte Thread-Erstellung wann Verwenden von time.Sleep?
Trotz der blockierenden Natur von time.Sleep erzeugt der Go-Planer aus zwei Gründen möglicherweise keine neuen Threads:
Unterschied in der Thread-Erstellung zwischen Beispielen
Ihr erstes Beispiel, in dem Goroutinen längere Zeit schlafen, verwendet a Feste Anzahl von Threads, da der Planer feststellen kann, dass während der Ruhephase keine zusätzliche Verarbeitung erforderlich ist. Im Gegensatz dazu erfordert Ihr zweites Beispiel, das gleichzeitige E/A-Vorgänge umfasst, mehr Threads, da jede Goroutine aktiv E/A-Aufgaben ausführt.
Wann Sie sich über die Thread-Erstellung Sorgen machen sollten
Im Allgemeinen gilt: Der Scheduler von Go verwaltet die Thread-Erstellung effizient. In seltenen Fällen, beispielsweise wenn Sie absichtlich zu viele Goroutinen erstellen, die die meiste Zeit damit verbringen, E/A-Vorgänge zu blockieren, kann es jedoch zu Problemen mit der übermäßigen Thread-Erstellung kommen.
Das obige ist der detaillierte Inhalt vonBlockiert „time.Sleep' wirklich Goroutinen?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!