Go の同時プログラミングでは、軽量スレッド (Goroutine) と通信メカニズム (パイプライン) を使用して、タスクの並列実行を実装します。同期プリミティブ (ミューテックスなど) は、ゴルーチン間のアクセスを調整するために使用されます。実際の例には、複数のリクエストを処理する効率的な同時 Web サービスの作成が含まれます。
並行プログラミングは、最新のソフトウェア開発の重要な側面であり、アプリケーションが複数のタスクを同時に実行できるようにすることで、効率とスケーラビリティを向上させます。 Go 言語は、優れた同時実行サポートにより、同時アプリケーションの構築に最適です。
Goroutine は Go の軽量スレッドであり、go
キーワードによって開始されます。これらは、同じメモリ空間を共有しますが、異なる実行ストリームで実行されるという点でスレッドとは異なります。 go
关键字启动。它们与线程不同,因为它们共享相同的内存空间,但运行在不同的执行流中。
在Go中创建一个Goroutine示例代码:
package main import "fmt" func main() { go func() { fmt.Println("Hello from goroutine") }() fmt.Println("Hello from main") }
此代码创建一个Goroutine,它并发打印Hello from goroutine
,同时主Goroutine打印Hello from main
。
管道是Goroutine之间通信的一种机制。它们类似于缓冲队列,Goroutine可以使用它们发送和接收消息。
创建一个通道的示例代码:
package main import "fmt" func main() { c := make(chan int) go func() { c <- 10 }() v := <-c fmt.Println(v) }
此代码创建一个管道c
,一个Goroutine向通道发送值10
,而主Goroutine从通道接收值并打印。
在并发编程中,同步对于确保Goroutine之间协调执行至关重要。Go提供了各种同步原语,例如互斥体、条件变量和等待组。
使用互斥体保护共享数据示例代码:
package main import ( "fmt" "sync" ) func main() { var m sync.Mutex var count int go func() { m.Lock() count++ m.Unlock() }() m.Lock() fmt.Println(count) m.Unlock() }
此代码使用互斥体m
来确保只有单个Goroutine可以同时访问count
package main import ( "fmt" "log" "net/http" ) func main() { http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) { go func() { fmt.Fprintf(w, "Hello, %s!", r.URL.Path[1:]) }() }) log.Fatal(http.ListenAndServe(":8080", nil)) }
Hello from main
を出力すると同時に Hello from goroutine
を出力する Goroutine を作成します。 c
を作成し、Goroutine が値 10
をチャネルに送信し、メインの Goroutine がその値を受信します。チャネルから取得して出力します。 同期と待機🎜🎜 同時プログラミングでは、Goroutine 間の協調的な実行を保証するために同期が重要です。 Go は、ミューテックス、条件変数、待機グループなどのさまざまな同期プリミティブを提供します。 🎜🎜ミューテックスを使用して共有データを保護するサンプル コード: 🎜rrreee🎜 このコードは、ミューテックス m
を使用して、単一のゴルーチンのみが count
変数に同時にアクセスできるようにします。 🎜🎜実践例: Web サービスの同時実行処理🎜🎜 Go の同時実行機能を使用すると、複数のリクエストを同時に処理できる効率的な Web サービスを作成できます。 🎜🎜このサンプル コードは、Goroutine を使用して受信リクエストを処理する単純な Web サーバーを示しています: 🎜rrreee🎜このサーバーは、Goroutine を使用して各受信リクエストを同時に処理し、スケーラビリティと応答性を向上させます。 🎜🎜結論🎜🎜 Go の同時プログラミング機能により、開発者は高性能、応答性、スケーラブルなアプリケーションを作成できます。ゴルーチン、パイプライン、同期、待機グループをマスターすることで、並列処理を最大限に活用できるようになります。 🎜以上がGolang 同時実行プログラミング ガイド: 並列処理の謎を探るの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。