Golang 코루틴의 생성 및 수명 주기

PHPz
풀어 주다: 2024-04-15 17:06:02
원래의
724명이 탐색했습니다.

코루틴은 명시적 전환을 통해 동일한 호출 스택의 실행 단위를 재사용하는 경량 스레드입니다. 수명주기에는 생성, 실행, 일시 중지, 복구 및 완료가 포함됩니다. go 키워드를 사용하여 실제로 병렬 계산(예: 피보나치 수 계산)에 사용할 수 있는 코루틴을 만듭니다.

Golang 코루틴의 생성 및 수명 주기

Golang 코루틴 생성 및 수명 주기

소개

코루틴은 스레드와 유사하며 독립적인 실행 단위입니다. 그러나 스레드와 달리 코루틴은 스레드처럼 독립적인 호출 스택을 가질 필요가 없으며 대신 코루틴을 명시적으로 일시 중지(yield)하거나 재개(resume)하여 코루틴 생성 함수의 호출 스택을 재사용합니다.

코루틴 만들기

Go에서는 go 키워드를 사용하여 코루틴을 만듭니다. 구문은 다음과 같습니다. go 关键字来创建一个协程,其语法如下:

go <协程体>
로그인 후 복사

其中,<协程体> 表示协程要执行的代码块。

协程的生命周期

协程的生命周期主要分为以下几个阶段:

  • 创建:协程通过 go 关键字创建。
  • 执行:协程开始执行其代码块。
  • 挂起:协程通过调用 chan <-select 语句挂起。
  • 恢复:协程通过 <-chanselect 语句恢复。
  • 完成:协程执行完成,或者调用 close(chan)

实战案例

以下是一个使用协程计算斐波那契数列的示例:

package main

import "fmt"

func main() {
    // 创建一个协程计算斐波那契数列
    go func() {
        first, second := 0, 1
        for i := 0; i < 10; i++ {
            fmt.Println(first)
            temp := first
            first = second
            second = temp + second
        }
    }()

    // 主协程等待其他协程执行完成
    <-make(chan bool)
}
로그인 후 복사

在该示例中,我们创建一个 goroutine 来计算斐波那契数列。主协程使用 make(chan bool)rrreee

where, 는 코루틴이 실행할 코드 블록을 나타냅니다. 🎜🎜🎜코루틴의 수명주기🎜🎜🎜코루틴의 수명주기는 크게 다음 단계로 구분됩니다. 🎜<ul> <li>🎜생성: 🎜코루틴은 <code>go를 통해 생성됩니다. > 키워드.
  • 🎜실행: 🎜코루틴은 코드 블록 실행을 시작합니다.
  • 🎜Suspend: 🎜코루틴은 chan 또는 <code>select 문을 호출하여 일시 중지됩니다.
  • 🎜Resume: 🎜코루틴은 또는 <code>select 문을 통해 복원됩니다.
  • 🎜Complete: 🎜코루틴 실행이 완료되었거나 close(chan)가 호출됩니다.
  • 🎜🎜실제 사례🎜🎜🎜다음은 코루틴을 사용하여 피보나치 수열을 계산하는 예입니다. 🎜rrreee🎜이 예에서는 피보나치 수열을 계산하는 고루틴을 생성합니다. 메인 코루틴은 make(chan bool)를 사용하여 버퍼링되지 않은 채널을 생성하고 채널이 닫힐 때까지 기다립니다. 고루틴은 계산을 완료하면 채널을 닫고 이를 통해 기본 고루틴에 종료를 알립니다. 🎜

    위 내용은 Golang 코루틴의 생성 및 수명 주기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

    관련 라벨:
    원천:php.cn
    본 웹사이트의 성명
    본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
    최신 이슈
    인기 튜토리얼
    더>
    최신 다운로드
    더>
    웹 효과
    웹사이트 소스 코드
    웹사이트 자료
    프론트엔드 템플릿