Bagaimanakah cara menggunakan coroutine Go untuk melaksanakan pemprosesan selari?

WBOY
Lepaskan: 2024-06-05 18:07:01
asal
673 orang telah melayarinya

Bagaimana cara menggunakan coroutine Go untuk melaksanakan pemprosesan selari? Buat coroutine untuk mengira jujukan Fibonacci secara selari. Coroutines memindahkan data melalui saluran untuk mencapai pengkomputeran selari. Coroutine utama menerima dan memproses hasil pengiraan selari.

如何使用 Go 协程实现并行处理?

Cara menggunakan Go coroutine untuk melaksanakan pemprosesan selari

Pengenalan kepada coroutine

Coroutine ialah concurrency primitif yang ringan dalam Go, yang membenarkan pelaksanaan dan fungsi resume yang dijalankan dalam Pautan (paut) memulakan urutan atau proses baharu. Ini membantu meningkatkan kecekapan konkurensi dan mengurangkan penggunaan memori.

Kes Praktikal: Pengiraan Selari bagi Jujukan Fibonacci

Untuk menunjukkan keupayaan pemprosesan selari coroutine, kami mencipta program Go untuk mengira Jujukan Fibonacci secara selari:

Rreee

Selepas programRun

program, item ke-20 jujukan Fibonacci akan dikeluarkan dalam terminal:

package main

import (
    "fmt"
    "time"
)

func main() {
    ch := make(chan int)
    go fib(20, ch)  // 启动一个协程计算斐波那契数
    time.Sleep(100 * time.Millisecond)  // 等待协程完成

    result := <-ch  // 从 channel 中接收计算结果
    fmt.Println("斐波那契数列的第 20 项:", result)
}

func fib(n int, ch chan int) {
    if n <= 1 {
        ch <- 1
        return
    }

    ch1 := make(chan int)
    ch2 := make(chan int)
    go fib(n-1, ch1)  // 通过协程并行计算斐波那契数列
    go fib(n-2, ch2)

    f1 := <-ch1
    f2 := <-ch2
    ch <- f1 + f2  // 并行计算的结果相加后发送到主协程
}
Salin selepas log masuk

Nota

    Coroutine tidak perlu mengeluarkan sumber secara eksplisit.
  • Penggunaan coroutine yang berlebihan boleh menyebabkan masalah prestasi kerana setiap coroutine mempunyai ruang tindanan sendiri.
  • Untuk operasi menyekat (seperti I/O), saluran hendaklah digunakan untuk komunikasi dan bukannya menghantar data terus antara coroutine.

Atas ialah kandungan terperinci Bagaimanakah cara menggunakan coroutine Go untuk melaksanakan pemprosesan selari?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
sumber:php.cn
Kenyataan Laman Web ini
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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan