Go 코루틴의 수명 주기 제어는 다음과 같은 방법으로 수행할 수 있습니다. 코루틴 만들기: go 키워드를 사용하여 새 작업을 시작합니다. 코루틴 종료: 모든 코루틴이 완료될 때까지 기다리고 sync.WaitGroup을 사용합니다. 채널 폐쇄 신호를 사용하세요. 컨텍스트 context.Context를 사용하십시오.
Go 언어에서 코루틴(고루틴이라고도 함)은 메인 스레드를 차단하지 않고 특정 작업을 수행하는 데 사용되는 경량 동시 실행 기관입니다. 강력하고 유지 관리가 가능한 병렬 코드를 작성하려면 코루틴의 수명 주기를 관리하는 것이 중요합니다.
코루틴을 만들려면 go
키워드를 사용하세요. 메인 스레드가 계속 실행될 수 있도록 백그라운드에서 새 작업을 시작합니다. go
关键字创建协程。它在后台启动一个新的任务,使主线程可以继续执行。
go func() { // 执行任务 }
无法直接终止协程,但有以下方法可以间接达到此目的:
使用 sync.WaitGroup
同步任务完成:
import "sync" var wg sync.WaitGroup func main() { for i := 0; i < 5; i++ { wg.Add(1) go func(i int) { // 执行任务 wg.Done() }(i) } wg.Wait() }
使用通道向协程发送"关闭"信号:
func main() { done := make(chan struct{}) for i := 0; i < 5; i++ { go func(i int) { for { select { case <-done: return // 协程停止 default: // 执行任务 } } }(i) } close(done) // 向所有协程发送"关闭"信号 }
使用 context.Context
import "context" func main() { ctx, cancel := context.WithCancel(context.Background()) for i := 0; i < 5; i++ { go func(i int) { for { select { case <-ctx.Done(): return // 协程停止 default: // 执行任务 } } }(i) } cancel() // 取消上下文 }
sync.WaitGroup</code 사용 > 동기화 작업 완료: 🎜<div class="code" style="position:relative; padding:0px; margin:0px;"><pre class='brush:go;toolbar:false;'>package main
import "fmt"
import "time"
func main() {
// 使用信道告诉协程何时退出
stop := make(chan struct{})
// 创建 5 个协程
for i := 0; i < 5; i++ {
go func(i int) {
for {
// 检查是否已经收到退出信号
select {
case <-stop:
fmt.Printf("协程 %d 已退出\n", i)
return
default:
fmt.Printf("协程 %d 正在运行\n", i)
time.Sleep(time.Second)
}
}
}(i)
}
// 运行 5 秒,然后发送退出信号
time.Sleep(time.Second * 5)
close(stop)
// 等待所有协程退出
time.Sleep(time.Second * 1)
}</pre><div class="contentsignin">로그인 후 복사</div></div><h4>채널 닫기 신호 사용</h4>🎜채널을 사용하여 코루틴에 "닫기" 신호 보내기: 🎜rrreee<h4>컨텍스트 사용</h4>🎜 <code>context.Context 사용
코루틴 실행을 관리합니다. 컨텍스트가 취소되면 코루틴도 종료됩니다. 🎜rrreee🎜실제 사례🎜🎜다음은 채널 닫기 신호를 사용하는 실제 사례입니다.🎜rrreee위 내용은 Golang 코루틴의 수명주기를 제어하는 방법은 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!