>백엔드 개발 >Golang >golang 함수와 goroutine의 수명주기

golang 함수와 goroutine의 수명주기

WBOY
WBOY원래의
2024-04-25 14:54:02519검색

함수 수명 주기: 선언 및 컴파일: 컴파일러는 함수의 구문과 유형을 확인합니다. 실행: 함수가 호출될 때 실행됩니다. Return : 실행 후 호출 위치로 돌아갑니다. 고루틴 수명 주기: 생성 및 시작: go 키워드를 통해 생성하고 시작합니다. 실행: 작업이 완료될 때까지 비동기적으로 실행됩니다. 종료: 작업이 완료되거나 오류가 발생하면 작업이 종료됩니다. 정리: 가비지 수집기는 완성된 고루틴이 차지하는 메모리를 정리합니다.

golang 함수와 goroutine의 수명주기

Golang 함수와 고루틴의 수명주기

함수의 수명주기

Golang에서는 함수가 선언된 직후 컴파일되며 실행 프로세스는 런타임에 발생합니다. 함수의 수명 주기는 다음과 같습니다.

  1. 선언 및 컴파일: 컴파일러는 함수의 구문과 유형을 구문 분석하고 확인합니다.
  2. 실행: 함수 호출에 대한 코드가 실행될 때만 함수가 실행됩니다.
  3. 반환: 함수가 실행된 후 제어 흐름은 호출된 위치로 돌아갑니다.

Goroutine 수명 주기

Goroutine은 Go 언어의 경량 스레드입니다. 수명 주기는 다음과 같습니다:

  1. 생성 및 시작: go 키워드를 통해 고루틴을 생성하고 즉시 시작합니다. go 关键字创建 Goroutine 并立即启动。
  2. 执行:Goroutine 异步运行,直到完成其任务。
  3. 结束:当 Goroutine 完成其任务或者出现错误时,它会结束。
  4. 清理:垃圾回收器会自动清理结束的 Goroutine 占用的内存。

实战案例:并行执行任务

考虑以下案例:我们想并行执行多个任务,例如计算素数的列表。

package main

import (
    "fmt"
    "sync"
    "time"
)

// 函数检查给定数字是否是素数。
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 main() {
    // 创建一个等待组以等待所有 Goroutine 完成。
    var wg sync.WaitGroup

    // 创建和启动一个 Goroutine 来检查每个数字是否是素数。
    for i := 1; i <= 100; i++ {
        wg.Add(1)
        go func(i int) {
            defer wg.Done() // Goroutine 完成后调用 Done() 以减少等待组计数。
            if isPrime(i) {
                fmt.Println(i)
            }
        }(i)
    }

    // 等待所有 Goroutine 完成。
    wg.Wait()
}

在这个案例中:

  • isPrime 函数负责检查给定的数字是否是素数。
  • main 函数创建和启动一个 Goroutine 来并行检查每个数字是否是素数。
  • sync.WaitGroup 用于确保在所有 Goroutine 完成之前主程序不会退出。
  • defer wg.Done()
실행: 🎜Goroutine은 작업이 완료될 때까지 비동기식으로 실행됩니다. 🎜🎜🎜End: 🎜고루틴은 작업을 완료하거나 오류가 발생하면 종료됩니다. 🎜🎜🎜청소: 🎜가비지 수집기는 완성된 고루틴이 차지하는 메모리를 자동으로 정리합니다. 🎜🎜🎜실용 사례: 병렬로 작업 실행🎜🎜다음 사례를 고려해보세요. 소수 목록 계산과 같이 여러 작업을 병렬로 실행하려고 합니다. 🎜rrreee🎜이 경우: 🎜
    🎜isPrime 함수는 주어진 숫자가 소수인지 확인하는 역할을 합니다. 🎜🎜 main 함수는 각 숫자가 소수인지 확인하는 고루틴을 생성하고 시작합니다. 🎜🎜sync.WaitGroup은 모든 고루틴이 완료되기 전에 메인 프로그램이 종료되지 않도록 하는 데 사용됩니다. 🎜🎜defer wg.Done() 각 고루틴이 완료 시 대기 그룹 수를 줄이는지 확인합니다. 🎜🎜

위 내용은 golang 함수와 goroutine의 수명주기의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.