Pipeline は Golang の特別なタイプで、Goroutine 間の安全かつ効率的な通信に使用され、特に並列処理とデータ交換に適しています。 make(chan T) を使用してパイプを作成します。T は、データが
Golang パイプライン: 関数通信の並列処理のメカニズム
パイプラインは、Goroutine ( Communicate ) を可能にする Golang の特別なタイプです。同時に実行される機能間で安全かつ効率的に実行されます)。これは、並列処理やデータ交換のシナリオで役立ちます。
make(chan T)
構文を使用してパイプラインを作成します。ここで、T
はパイプで渡されるデータのタイプです。例:
myChannel := make(chan int)
パイプからデータを受信するには、 演算子を使用します。例:
data := <-myChannel
演算子を使用してパイプにデータを送信します。例:
myChannel <- 42
次の例は、パイプラインを使用してスライスの合計を並列で計算する方法を示しています。
package main import "fmt" func main() { numbers := []int{1, 2, 3, 4, 5, 6, 7, 8, 9, 10} numWorkers := 2 // 创建管道 results := make(chan int) // 创建 Goroutine 并在管道上发送部分和 for i := 0; i < numWorkers; i++ { go func(start, end int) { partialSum := 0 for i := start; i <= end; i++ { partialSum += numbers[i] } results <- partialSum }(i * len(numbers) / numWorkers, (i+1) * len(numbers) / numWorkers - 1) } // 读取管道并计算总和 totalSum := 0 for i := 0; i < numWorkers; i++ { totalSum += <-results } fmt.Println("Total sum:", totalSum) }
この例では、 results
パイプは、個々のゴルーチンとメインのゴルーチンの間で部分和を渡すために使用されます。メインのゴルーチンはパイプから結果を読み取り、最終的な合計を計算します。この実装により、合計タスクが並列実行される部分に効果的に分解され、パフォーマンスが大幅に向上します。
以上がGolang パイプラインの同時関数通信サポート メカニズムの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。