Sobes.tech
Junior — Middle

Como são implementadas as filas de tarefas dentro do sistema de planeamento de processos?

sobes.tech IA

Resposta da IA

Nos sistemas de planeamento de processos (scheduler) em Go, as filas de tarefas são geralmente implementadas usando estruturas de dados como canais (channels) e filas (queues).

Principais métodos:

  • Canais (channels): Go fornece canais integrados que permitem transferir tarefas de forma segura entre goroutines. Um canal pode ser considerado como uma fila FIFO.

  • Filas em slices ou listas: Às vezes, para lógica mais complexa, usam-se implementações próprias de filas baseadas em slices ou listas com bloqueios (mutex) para sincronização.

Exemplo de uma fila simples de tarefas usando um canal:

package main

import (
    "fmt"
    "time"
)

func worker(tasks <-chan int) {
    for task := range tasks {
        fmt.Println("A processar tarefa", task)
        time.Sleep(time.Second) // simulação de trabalho
    }
}

func main() {
    tasks := make(chan int, 5) // canal com buffer

    go worker(tasks)

    for i := 1; i <= 10; i++ {
        tasks <- i
        fmt.Println("Tarefa adicionada", i)
    }
    close(tasks)
    time.Sleep(2 * time.Second)
}

Desta forma, os canais fornecem uma fila de tarefas segura e conveniente para o agendador.