Golang 同時プログラミング フレームワーク ガイド: ゴルーチン: 並列処理を実現する軽量のコルーチン; チャネル: ゴルーチン間の通信に使用されるパイプライン; WaitGroups: メイン コルーチンが複数のゴルーチンの完了を待機できるようにします。そして締め切り。
はじめに
同時プログラミングは、高性能でスケーラブルなアプリケーションを構築する上で非常に重要です。 Golang は豊富な同時実行プリミティブのセットを提供しますが、適切なフレームワークを選択すると、同時プログラミングの効率をさらに簡素化し、向上させることができます。この記事では、さまざまな人気のある Golang 同時プログラミング フレームワークを調査し、その実践例を示します。
1. ゴルーチン
ゴルーチンは、異なるスレッドで並列実行できる Golang の軽量コルーチンです。これらは非常に効率的で使いやすく、特に CPU を集中的に使用するタスクに適しています。
package main import ( "fmt" "time" ) func main() { // 创建一个 goroutine 来打印消息 go func() { for i := 0; i < 10; i++ { fmt.Println("Hello, world!") time.Sleep(100 * time.Millisecond) } }() // 主协程等待 goroutine 完成 time.Sleep(10 * time.Second) }
2. チャネル
チャネルはゴルーチン間の通信に使用されるパイプです。これらは、値を渡して操作を同期するための安全かつ効率的な方法を提供します。
package main import ( "fmt" "time" ) func main() { // 创建一个 channel 来传递值 ch := make(chan string) // 创建一个 goroutine 来发送数据到 channel go func() { ch <- "Hello, world!" }() // 接收 goroutine 发送的值 msg := <-ch fmt.Println(msg) time.Sleep(10 * time.Second) }
3. WaitGroups
WaitGroups を使用すると、メイン コルーチンが複数のゴルーチンが完了するのを待機できます。これにより、すべての goroutine の実行が終了するまでメイン ロジックの実行が続行されないようにすることができます。
package main import ( "fmt" "sync" ) func main() { // 创建一个 WaitGroup wg := &sync.WaitGroup{} // 添加需要等待的 goroutine 数量 wg.Add(2) // 创建并运行 goroutines go func() { fmt.Println("Goroutine 1") wg.Done() }() go func() { fmt.Println("Goroutine 2") wg.Done() }() // 主协程等待 goroutines 完成 wg.Wait() fmt.Println("All goroutines completed") }
4. Context
Context はキャンセルや期限などのコンテキスト情報を goroutine に提供します。これは、同時リクエストと操作を管理するのに役立ちます。
package main import ( "context" "fmt" "time" ) func main() { // 创建一个 context ctx, _ := context.WithTimeout(context.Background(), 5*time.Second) // 创建一个 goroutine 并传递 context go func(ctx context.Context) { fmt.Println("Goroutine started") // 监听 context 是否已取消 select { case <-ctx.Done(): fmt.Println("Goroutine canceled") return } // ... 执行其他操作 }(ctx) // 等待 3 秒后取消 context time.Sleep(3 * time.Second) ctx.Done() }
結論
Golang は強力な同時プログラミングのプリミティブを提供し、これらのフレームワークは同時プログラミングの効率をさらに簡素化し、向上させます。適切なフレームワークの選択は、アプリケーションの特定のニーズによって異なります。これらのフレームワークを理解することで、開発者は高性能でスケーラブルな並列プログラムを構築できます。
以上が同時プログラミングに最も適した golang フレームワークはどれですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。