Junior — Middle
Dans quelles situations l'exécution d'une goroutine transfère-t-elle le contrôle à d'autres threads ou tâches?
sobes.tech IA
Réponse de l'IA
В Go горутины — это легковесные потоки, которые планируются планировщиком Go. Выполнение горутины может передавать управление другим горутинам в следующих ситуациях:
- При вызове функции
runtime.Gosched(): явно передает управление планировщику, позволяя другим горутинам выполняться. - При блокирующих операциях: например, при ожидании канала (
<-chan), мьютекса, таймера или другого синхронизирующего примитива горутина блокируется, и планировщик переключается на другую. - При системных вызовах или операциям ввода-вывода: если горутина ожидает завершения операции, планировщик может переключиться.
- При завершении квантов времени: планировщик Go может прервать текущую горутину и переключиться на другую для справедливого распределения процессорного времени.
Таким образом, переключение управления происходит автоматически планировщиком Go, а также может быть вызвано явно через runtime.Gosched() или при блокировках.