Go의 코루틴은 동일한 프로세스에서 여러 작업을 실행할 수 있는 가벼운 동시성 메커니즘입니다. 프로세스 메모리 공간을 공유하고 채널을 통해 통신할 수 있습니다. 또한 이 문서에서는 go 키워드를 사용한 코루틴 생성에 대해 설명합니다. 채널은 make 함수로 생성되며 코루틴 간에 값을 전달하는 데 사용할 수 있습니다. 실제 사례에서는 코루틴을 사용하여 병렬 컴퓨팅을 구현하고 8개의 코루틴을 통해 100,000개의 소수를 계산하는 방법을 보여줍니다.
Go 코루틴 및 동시성 모델
소개
코루틴은 동일한 프로세스에서 여러 개의 독립적인 작업을 실행할 수 있도록 하는 Go 언어의 경량 동시성 메커니즘입니다. 이 기사에서는 Go의 코루틴과 동시성 모델을 살펴보고 실제 사례를 제공합니다.
Coroutines
Coroutine은 Go 언어의 동시 실행 단위로 스레드와 유사하지만 더 가볍습니다. 코루틴은 동일한 프로세스의 메모리 공간을 공유하며 데이터를 쉽게 공유할 수 있습니다. 다음과 같이 go 키워드를 사용하여 코루틴을 만듭니다.
go func() { // 协程体 }
Channels
채널은 코루틴 간에 값을 전달하는 데 사용되는 Go의 통신 메커니즘입니다. 채널은 단방향 또는 양방향일 수 있으며 버퍼링되거나 버퍼링되지 않을 수 있습니다. 아래와 같이 make 함수를 사용하여 채널을 만듭니다.
ch := make(chan int, 10)
연습 사례: 병렬 컴퓨팅
코루틴을 사용하여 병렬 컴퓨팅의 실제 사례를 구현해 보겠습니다. 우리는 코루틴 풀을 만들고 각 코루틴에서 소수의 큰 테이블을 계산합니다.
package main import ( "fmt" "math/rand" "time" ) const primeCount = 100000 // 计算素数 func isPrime(n int) bool { if n <= 1 { return false } for i := 2; i*i <= n; i++ { if n%i == 0 { return false } } return true } // 协程函数 func parallelPrimes(ch chan int) { for i := 0; i < primeCount; i++ { n := rand.Intn(100000) if isPrime(n) { ch <- n } } } func main() { // 创建通道和协程池 ch := make(chan int, primeCount) for i := 0; i < 8; i++ { go parallelPrimes(ch) } // 等待协程池完成 close(ch) start := time.Now() // 收集素数 for prime := range ch { fmt.Println(prime) } elapsed := time.Since(start) fmt.Printf("Elapsed time: %v\n", elapsed) }
이 경우에는 각각 100,000개의 소수를 계산하는 8개의 코루틴을 만들었습니다. 메인 코루틴은 소수를 수집하여 콘솔에 출력하는 역할을 합니다.
위 내용은 Golang 코루틴 및 동시성 모델의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!