Est-il permis de passer des segments de tranche (slice) à des goroutines séparées pour un traitement parallèle ?
sobes.tech IA
Réponse de l'IA
Oui, transférer des segments de tranche (slice) vers des goroutines séparées pour un traitement parallèle est autorisé et couramment utilisé pour paralléliser les tâches. Cependant, il est important de se rappeler que les slices en Go sont des types de référence, c’est-à-dire que plusieurs goroutines peuvent faire référence au même tableau sous-jacent. Pour éviter les conditions de course, il faut s’assurer que chaque goroutine travaille avec un segment unique de la tranche et ne modifie pas les données utilisées par d’autres goroutines, ou utiliser la synchronisation (par exemple, mutex) lors de l’accès partagé.
Exemple de transfert sécurisé de segments de tranche vers des goroutines:
func processSegment(segment []int, wg *sync.WaitGroup) {
defer wg.Done()
// Traitement du segment
}
func main() {
data := []int{1, 2, 3, 4, 5, 6, 7, 8}
var wg sync.WaitGroup
segmentSize := 2
for i := 0; i < len(data); i += segmentSize {
end := i + segmentSize
if end > len(data) {
end = len(data)
}
wg.Add(1)
go processSegment(data[i:end], &wg)
}
wg.Wait()
}
Dans cet exemple, chaque goroutine reçoit un segment séparé de la tranche, ce qui est sûr pour le traitement parallèle.