Sobes.tech
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
	}
}