Sobes.tech
Junior — Middle

Est-il possible qu'une situation se produise où le nombre de threads dépasse le nombre de cœurs du processeur?

sobes.tech IA

Réponse de l'IA

Oui, une telle situation est possible. En Go (Golang), le nombre de threads (goroutines) peut largement dépasser le nombre de cœurs physiques du processeur. Les goroutines sont des threads légers gérés par le runtime de Go, et leur nombre peut atteindre des milliers voire des millions, alors que le nombre de cœurs est généralement limité par le matériel.

Le runtime de Go planifie l'exécution des goroutines sur les threads système disponibles, qui sont à leur tour répartis entre les cœurs du processeur. Ainsi, le nombre de goroutines n'est pas limité par le nombre de cœurs, mais par les ressources du système (mémoire et temps CPU). Cela permet d'utiliser efficacement le multitâche et le parallélisme.

Exemple :

package main

import (
    "fmt"
    "time"
)

func worker(id int) {
    fmt.Printf("Travailleur %d démarré\n", id)
    time.Sleep(time.Second)
    fmt.Printf("Travailleur %d terminé\n", id)
}

func main() {
    for i := 0; i < 1000; i++ {
        go worker(i) // Lance 1000 goroutines
    }
    time.Sleep(2 * time.Second) // Attend la fin
}

Ici, 1000 goroutines sont créées, ce qui est bien plus que le nombre de cœurs, mais le programme fonctionne correctement.