Go에서 동시에 프로그래밍할 때는 적절한 패턴을 이해하고 사용하는 것이 중요합니다. CSP는 순차 프로세스 기반의 동시성 모드로 고루틴을 사용하여 구현되며 간단한 통신에 적합합니다. 메시지 전달은 통신을 위한 메시지 대기열로 채널을 사용하는 패턴이며 복잡하거나 다중 Goroutine 상호 작용 시나리오에 적합합니다. 실제 애플리케이션에서 CSP는 간단한 메시지 서비스를 구현하고 채널을 통해 서로 다른 고루틴 간에 메시지를 주고받는 데 사용될 수 있습니다.
Go의 동시성 패턴: CSP와 메시지 전달
Go에서 동시에 프로그래밍할 때는 적절한 패턴을 이해하고 사용하는 것이 중요합니다. CSP(순차적 프로세스 전달) 및 메시지 전달은 동시 작업을 효율적으로 조정하는 다양한 방법을 제공하는 Go의 두 가지 일반적인 동시성 패턴입니다.
CSP
CSP는 전송 및 수신 작업을 교대로 수행하는 순차 프로세스 기반 동시 모드입니다. Go에는 고루틴이 내장되어 있어 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
메시징
메시징은 동시 프로세스 간의 통신에 사용되는 또 다른 패턴입니다. Go의 채널은 기본적으로 Goroutines가 데이터를 안전하고 효율적으로 교환할 수 있게 해주는 메시지 대기열입니다.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
이 다양한 고루틴 실행을 동기화하는 데 사용됩니다. 고루틴은 ch
채널에 문자열 메시지를 보내고, 기본 고루틴은 채널에서 메시지를 받습니다. 단일 고루틴이 데이터를 보내고 받는 간단한 통신에는 CSP를 사용하세요.
여러 고루틴이 공유 통신 매체(예: 채널)와 상호 작용하는 보다 복잡한 통신에 메시징을 사용하세요.
🎜Practice🎜🎜🎜실용적인 예는 CSP를 사용하여 간단한 메시징 서비스를 구현하는 것입니다. 🎜rrreee🎜이 예는 CSP 패턴을 사용하여 서로 다른 고루틴 간에 메시지를 보내고 받는 방법을 보여줍니다. 🎜위 내용은 Go의 동시성 패턴: CSP와 메시지 전달의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!