Go で同時にプログラミングする場合、適切なパターンを理解して使用することが重要です。 CSP は、Goroutine を使用して実装された逐次処理に基づく同時実行モードであり、単純な通信に適しています。メッセージ パッシングは、通信用のメッセージ キューとしてチャネルを使用するパターンであり、複雑なまたは複数の Goroutine 対話シナリオに適しています。実際のアプリケーションでは、CSP を使用して単純なメッセージ サービスを実装し、チャネルを通じて異なるゴルーチン間でメッセージを送受信できます。
Go の同時実行パターン: CSP とメッセージ パッシング
Go で同時プログラミングを行う場合、適切なパターンを理解し、使用することが重要です。 Communication Sequential Processes (CSP) とメッセージ パッシングは Go の 2 つの一般的な同時実行パターンであり、同時操作を効率的に調整するためのさまざまな方法を提供します。
CSP
CSP は、送信操作と受信操作を交互に実行する逐次プロセスに基づく同時モードです。 Go 言語には Goroutines が組み込まれているため、CSP パターンは簡潔で強力なオプションになります。
package main import "fmt" func main() { ch := make(chan int) go func() { ch <- 42 }() fmt.Println(<-ch) }
この例では、ゴルーチンはチャネル ch
に整数を送信する役割を果たし、メインのゴルーチンはチャネルから整数を受信します。 ch
发送一个整数,而主 Goroutine 从通道中接收该整数。
消息传递
消息传递是另一种用于在并发进程之间进行通信的模式。Go 中的通道本质上是消息队列,允许 Goroutine 安全且有效地交换数据。
package main import ( "fmt" "sync" ) func main() { var wg sync.WaitGroup ch := make(chan string) wg.Add(1) go func() { defer wg.Done() ch <- "Hello" }() wg.Wait() fmt.Println(<-ch) }
在这个示例中,一个额外的 sync.WaitGroup
用于同步不同 Goroutine 的执行。Goroutine 将字符串消息发送到通道 ch
メッセージング
メッセージングは、同時プロセス間の通信に使用されるもう 1 つのパターンです。 Go のチャネルは本質的には、Goroutine が安全かつ効率的にデータを交換できるようにするメッセージ キューです。package main import ( "fmt" "sync" ) type Message struct { From, To, Content string } func main() { ch := make(chan Message) var wg sync.WaitGroup wg.Add(2) go func() { defer wg.Done() senderMessages(ch) }() go func() { defer wg.Done() receiveMessages(ch) }() wg.Wait() } func senderMessages(ch chan Message) { ch <- Message{From: "John", To: "Jane", Content: "Hello"} ch <- Message{From: "Jane", To: "John", Content: "Hi"} } func receiveMessages(ch chan Message) { for msg := range ch { fmt.Println(msg) } }この例では、追加の
sync.WaitGroup
を使用して、さまざまな Goroutine の実行を同期します。ゴルーチンは文字列メッセージをチャネル ch
に送信し、メインのゴルーチンはチャネルからメッセージを受信します。 単一の Goroutine がデータを送受信する単純な通信には CSP を使用します。
より複雑な通信にはメッセージングを使用します。複数のゴルーチンが共有通信媒体 (チャネルなど) と対話します。
🎜実践🎜🎜🎜 実用的な例は、CSP を使用して単純なメッセージング サービスを実装することです: 🎜rrreee🎜 この例では、CSP パターンを使用して、異なるゴルーチン間でメッセージを送受信する方法を示します。 🎜以上がGo の同時実行パターン: CSP とメッセージ パッシングの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。