Le mécanisme de synchronisation de la communication entre pipeline et fonction dans le langage Go est mis en œuvre via le blocage du tampon du pipeline pour garantir l'ordre et la sécurité de la transmission des données. Concrètement : lorsque le canal est vide, la réception des données sera bloquée. Lorsque le tuyau est plein, l’envoi de données sera bloqué. Cas pratique : Calculez la séquence de Fibonacci et utilisez des pipelines pour synchroniser la transmission des résultats de calcul.
Mécanisme de synchronisation pour la communication entre pipeline et fonction en langage Go
En langage Go, un pipeline est un canal utilisé pour transmettre en toute sécurité des données entre des goroutines concurrentes. La communication par pipeline et par fonction peut mettre en œuvre des mécanismes de synchronisation dans différents scénarios pour garantir la fiabilité et la sécurité de la transmission des données.
Bases du canal
Le pipeline du langage Go est un canal de communication mis en mémoire tampon qui contient une file d'attente typée d'éléments. Afin de créer un pipeline, vous pouvez utiliser la fonction make :
channel := make(chan dataType)
où dataType
est le type de l'élément transféré dans le pipeline. dataType
是管道中传输元素的类型。
发送和接收数据
使用 chan
关键字声明的管道变量既可以发送数据,也可以接收数据。发送数据使用 <-chan
表达式,而接收数据使用 chan<-
Envoi et réception de données
Les variables de pipeline déclarées à l'aide du mot-cléchan
peuvent à la fois envoyer et recevoir des données. L'envoi de données utilise l'expression <-chan
, tandis que la réception de données utilise l'expression chan<-
: // 发送数据 channel <- data // 接收数据 data := <-channel
Mécanisme de synchronisation
Lorsque le tube est vide, de Le canal recevant les données sera bloqué. L’envoi de données vers le canal sera également bloqué lorsque le canal sera plein. Ce comportement de blocage peut mettre en œuvre un mécanisme de synchronisation entre les goroutines pour garantir l'ordre et la sécurité de la transmission des données.Cas pratique : Calcul de la séquence de Fibonacci
🎜🎜Considérons une fonction pour calculer le nième nombre de la séquence de Fibonacci. Vous pouvez communiquer avec la fonction principale via des canaux pour synchroniser la transmission des résultats de calcul : 🎜// 计算斐波那契数的函数 func fibonacci(n int, channel chan int) { x, y := 0, 1 for i := 0; i < n; i++ { x, y = y, x+y } channel <- x // 发送计算结果 } // 主函数 func main() { channel := make(chan int) go fibonacci(10, channel) // 启动 goroutine 计算斐波那契数 result := <-channel // 从管道接收计算结果 fmt.Println(result) }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!