Назад к вопросам
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
	}
}