Go 함수는 다음과 같은 방법으로 고루틴 실행을 제어합니다: Runtime.Goexit(): 현재 고루틴을 강제로 종료합니다. sync.WaitGroup: 고루틴 그룹이 완료될 때까지 기다립니다. select{}: Goroutine이 여러 이벤트 중 하나를 기다리고 첫 번째로 트리거된 이벤트를 기반으로 해당 작업을 수행할 수 있습니다. context.Context: 기한을 넘기거나 고루틴에 대한 요청을 취소하는 데 사용할 수 있습니다.
Go 함수가 Goroutine 실행을 제어하는 방법
Go 프로그래밍 언어는 동시성을 지원하고 Goroutine(경량 스레드)을 사용하여 동시성을 달성합니다. 고루틴은 함수를 통해 생성할 수 있으며 생성 후 언제든지 시작할 수 있습니다. 이 글에서는 고루틴 실행을 제어하는 데 사용되는 다양한 기능을 소개하고 몇 가지 실제 예제를 제공합니다.
고루틴 실행을 제어하는 함수
실제 사례
1. Goroutine을 종료합니다
package main import ( "fmt" "runtime" "time" ) func main() { go func() { for { fmt.Println("Goroutine is running...") time.Sleep(1 * time.Second) } }() // 等待 10 秒后终止 Goroutine time.Sleep(10 * time.Second) runtime.Goexit() }
2. sync.WaitGroup을 사용하여 Goroutine
package main import ( "fmt" "sync" "time" ) func main() { var wg sync.WaitGroup // 创建 5 个 Goroutine for i := 0; i < 5; i++ { wg.Add(1) go func(i int) { fmt.Printf("Goroutine %d is running...\n", i) time.Sleep(1 * time.Second) wg.Done() }(i) } // 等待所有 Goroutine 完成 wg.Wait() }
3을 사용하여 이벤트에 응답합니다.
4 . 컨텍스트를 사용하세요. 고루틴 취소위 내용은 golang 함수는 goroutine 실행을 어떻게 제어합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!package main
import (
"fmt"
"time"
)
func main() {
fmt.Println("Waiting for events...")
// 创建两个 channel
ch1 := make(chan string)
ch2 := make(chan string)
// 创建两个 Goroutine 向 channel 发送数据
go func() {
time.Sleep(1 * time.Second)
ch1 <- "Event from Channel 1"
}()
go func() {
time.Sleep(2 * time.Second)
ch2 <- "Event from Channel 2"
}()
for {
select {
case msg := <-ch1:
fmt.Println(msg)
return
case msg := <-ch2:
fmt.Println(msg)
return
}
}
}