Назад к вопросам
Middle+
181
questionbank
Какой тип многозадачности используется в Go и какой тип был до версии Go 1.15?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
sobes.tech AI
В Golang используется кооперативная многозадачность с вытеснением.
До версии Go 1.15 использовалась исключительно кооперативная многозадачность без вытеснения.
Различия:
| Тип многозадачности | Описание |
|---|---|
| Кооперативная без вытеснения | Горутина добровольно уступает управление, вызывая блокирующие операции или runtime.Gosched(). Если горутина не уступает, другие горутины могут быть заблокированы. |
| Кооперативная с вытеснением | Планировщик может принудительно прервать выполнение горутины после некоторого времени, даже если она не выполняет блокирующую операцию. Это достигается внедрением точек прерывания в циклические конструкции. |
Пример точки прерывания в цикле (вGo компилятор внедряет их автоматически в подходящие места):
func heavyComputation() {
for i := 0; i < 1000000000; i++ {
// В этом месте компилятор может добавить проверку
// на необходимость переключения контекста планировщиком.
_ = i * i
}
}