Sobes.tech
Junior — Middle

Come sono implementate le code di attività all'interno del sistema di pianificazione dei processi?

sobes.tech AI

Risposta dell'AI

Nei sistemi di pianificazione dei processi (scheduler) in Go, le code di task sono generalmente implementate utilizzando strutture dati come canali (channels) e code (queues).

Metodi principali:

  • Canali (channels): Go fornisce canali integrati che consentono di trasferire task in modo sicuro tra goroutine. Un canale può essere considerato come una coda FIFO.

  • Code su slice o liste: A volte, per logiche più complesse, si utilizzano implementazioni proprie di code basate su slice o liste con mutex per la sincronizzazione.

Esempio di una semplice coda di task usando un canale:

package main

import (
    "fmt"
    "time"
)

func worker(tasks <-chan int) {
    for task := range tasks {
        fmt.Println("Elaborazione task", task)
        time.Sleep(time.Second) // simulazione di lavoro
    }
}

func main() {
    tasks := make(chan int, 5) // canale con buffer

    go worker(tasks)

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

In questo modo, i canali forniscono una coda di task sicura e comoda per lo scheduler.