Go コルーチンを使用して並列処理を実装するにはどうすればよいですか?フィボナッチ数列を並列計算するコルーチンを作成します。コルーチンはチャネルを通じてデータを転送し、並列コンピューティングを実現します。メイン コルーチンは、並列計算の結果を受け取って処理します。
Go コルーチンを使用して並列処理を実装する方法
コルーチンの概要
コルーチンは Go の軽量同時実行プリミティブであり、ゴルーチン (同時実行関数) 内での実行を可能にします。新しいスレッドまたはプロセスを開始する。これにより、同時実行効率が向上し、メモリ消費量が削減されます。
実際のケース: フィボナッチ数列の並列計算
コルーチンの並列処理機能を実証するために、フィボナッチ数列を並列で計算する Go プログラムを作成します。プログラムを実行すると、フィボナッチ数列の 20 番目の項目がターミナルに出力されます。
package main import ( "fmt" "time" ) func main() { ch := make(chan int) go fib(20, ch) // 启动一个协程计算斐波那契数 time.Sleep(100 * time.Millisecond) // 等待协程完成 result := <-ch // 从 channel 中接收计算结果 fmt.Println("斐波那契数列的第 20 项:", result) } func fib(n int, ch chan int) { if n <= 1 { ch <- 1 return } ch1 := make(chan int) ch2 := make(chan int) go fib(n-1, ch1) // 通过协程并行计算斐波那契数列 go fib(n-2, ch2) f1 := <-ch1 f2 := <-ch2 ch <- f1 + f2 // 并行计算的结果相加后发送到主协程 }
Notes
コルーチンはリソースを明示的に解放する必要はありません。各コルーチンには独自のスタック領域があるため、コルーチンを過度に使用するとパフォーマンスの問題が発生する可能性があります。
ブロック操作 (I/O など) の場合、コルーチン間でデータを直接渡すのではなく、チャネルを通信に使用する必要があります。以上がGo コルーチンを使用して並列処理を実装するにはどうすればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。