Middle+
Welcher Multitasking-Typ wird in Go verwendet und welcher Typ war vor Version 1.15 von Go?
sobes.tech KI
Antwort von AI
В Golang используется кооперативная многозадачность с вытеснением.
До версии Go 1.15 использовалась исключительно кооперативная многозадачность без вытеснения.
Различия:
| Тип многозадачности | Описание |
|---|---|
| Кооперативная без вытеснения | Горутина добровольно уступает управление, вызывая блокирующие операции или runtime.Gosched(). Если горутина не уступает, другие горутины могут быть заблокированы. |
| Кооперативная с вытеснением | Планировщик может принудительно прервать выполнение горутины после некоторого времени, даже если она не выполняет блокирующую операцию. Это достигается внедрением точек прерывания в циклические конструкции. |
Пример точки прерывания в цикле (вGo компилятор внедряет их автоматически в подходящие места):
func heavyComputation() {
for i := 0; i < 1000000000; i++ {
// В этом месте компилятор может добавить проверку
// на необходимость переключения контекста планировщиком.
_ = i * i
}
}