Middle+
Que tipo de multitarefa é usado no Go e que tipo havia antes da versão 1.15 do Go?
sobes.tech IA
Resposta da IA
O Golang utiliza multitarefa cooperativa com preempção.
Até à versão Go 1.15, era utilizada exclusivamente multitarefa cooperativa sem preempção.
Diferenças:
| Tipo de multitarefa | Descrição |
|---|---|
| Cooperativa sem preempção | A goroutine cede voluntariamente o controlo, chamando operações bloqueantes ou runtime.Gosched(). Se a goroutine não ceder, outras goroutines podem ficar bloqueadas. |
| Cooperativa com preempção | O escalonador pode interromper forçosamente a execução de uma goroutine após algum tempo, mesmo que ela não esteja a realizar uma operação bloqueante. Isto é conseguido inserindo pontos de interrupção em estruturas de ciclo. |
Exemplo de ponto de interrupção num ciclo (o compilador Go os insere automaticamente nos locais adequados):
func heavyComputation() {
for i := 0; i < 1000000000; i++ {
// Neste local, o compilador pode adicionar uma verificação
// para mudar o contexto através do escalonador.
_ = i * i
}
}