Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Penciptaan dan kitaran hidup coroutine Golang

Penciptaan dan kitaran hidup coroutine Golang

PHPz
PHPzasal
2024-04-15 17:06:02711semak imbas

Coroutine ialah utas ringan yang menggunakan semula unit pelaksanaan dalam timbunan panggilan yang sama melalui penukaran eksplisit. Kitaran hayatnya termasuk penciptaan, pelaksanaan, penggantungan, pemulihan dan penyiapan. Gunakan kata kunci pergi untuk membuat coroutine, yang boleh digunakan untuk pengiraan selari (seperti mengira nombor Fibonacci) dalam amalan.

Penciptaan dan kitaran hidup coroutine Golang

Penciptaan dan kitaran hayat coroutine Golang

Pengenalan

Coroutines ialah benang ringan adalah serupa dengan utas dan merupakan unit pelaksanaan bebas. Tetapi tidak seperti urutan, coroutine tidak perlu mempunyai timbunan panggilan bebas seperti utas Sebaliknya, mereka menggunakan semula timbunan panggilan fungsi penciptaan coroutine dengan menggantung (hasil) atau menyambung semula (sambung semula) coroutine.

Buat coroutine

Dalam Go, gunakan kata kunci go untuk mencipta coroutine Sintaksnya adalah seperti berikut: go 关键字来创建一个协程,其语法如下:

go <协程体>

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

协程的生命周期

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

  • 创建:协程通过 go 关键字创建。
  • 执行:协程开始执行其代码块。
  • 挂起:协程通过调用 chan 或 <code>select 语句挂起。
  • 恢复:协程通过 或 <code>select 语句恢复。
  • 完成:协程执行完成,或者调用 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

di mana, <coroutine body> mewakili blok kod yang akan dilaksanakan oleh coroutine. 🎜🎜🎜Kitaran hayat coroutine🎜🎜🎜Kitaran hayat coroutine terutamanya dibahagikan kepada peringkat berikut: 🎜<ul> <li>🎜Penciptaan: 🎜Coroutine dicipta melalui <code>go kata kunci.
  • 🎜Pelaksanaan: 🎜Coroutine mula melaksanakan blok kodnya.
  • 🎜Tangguhkan: 🎜Coroutine digantung dengan memanggil pernyataan chan atau <code>select.
  • 🎜Sambung semula: 🎜Coroutine dipulihkan melalui pernyataan atau <code>select.
  • 🎜Lengkap: 🎜Pelaksanaan coroutine selesai atau close(chan) dipanggil.
  • 🎜🎜Kes praktikal🎜🎜🎜Berikut ialah contoh penggunaan coroutine untuk mengira jujukan Fibonacci: 🎜rrreee🎜Dalam contoh ini, kami mencipta goroutine untuk mengira jujukan Fibonacci. Coroutine utama menggunakan make(chan bool) untuk mencipta saluran tidak buffer dan menunggu saluran ditutup. Apabila goroutine melengkapkan pengiraannya, ia menutup saluran, dengan itu memberitahu goroutine utama penghujungnya. 🎜

    Atas ialah kandungan terperinci Penciptaan dan kitaran hidup coroutine Golang. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

    Kenyataan:
    Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn