Rumah > pembangunan bahagian belakang > Golang > Apakah mekanisme interaksi antara fungsi golang dan goroutine?

Apakah mekanisme interaksi antara fungsi golang dan goroutine?

WBOY
Lepaskan: 2024-05-02 18:36:02
asal
954 orang telah melayarinya

Fungsi dan Goroutine berinteraksi melalui mekanisme berikut dalam bahasa Go: Saluran: bertukar-tukar data dengan selamat antara Paip Goroutines: digunakan untuk berkomunikasi dengan proses luaran

Apakah mekanisme interaksi antara fungsi golang dan goroutine?

Fungsi dalam bahasa Go berinteraksi dengan Mekanisme Goroutine

PengenalanGoroutine

ialah benang ringan yang membolehkan program Go melaksanakan kod secara selari. Ia diuruskan oleh Go Runtime dan digunakan untuk memproses tugas secara selari tanpa perlu membuat dan mengurus benang secara manual.

Interaksi antara fungsi dan Goroutines
  • Interaksi antara fungsi dan Goroutines dalam bahasa Go dicapai melalui mekanisme berikut:
  • Saluran (Saluran): Mekanisme komunikasi untuk menukar data dengan selamat antara Goroutines. Ia adalah baris gilir ditaip di mana pengirim menulis data ke saluran dan penerima membaca data daripadanya.
Paip:

Satu jenis saluran khas yang direka untuk berkomunikasi dengan alatan baris arahan atau proses luaran yang lain.

Kes praktikal: Penjumlahan selari

Untuk menunjukkan interaksi antara fungsi dan Goroutine, kami mencipta program penjumlahan selari yang mudah:
    package main
    
    import (
        "fmt"
        "math/rand"
        "sync"
        "time"
    )
    
    const numIterations = 1000000
    
    func main() {
        sum := 0
    
        // 初始化互斥锁以保护并发的 sum 变量
        lock := &sync.Mutex{}
    
        // 创建一个通道
        c := make(chan int)
    
        // 创建 Goroutine 并发计算和并将结果发送到通道
        for i := 0; i < numIterations; i++ {
            go func(num int) {
                rand.Seed(time.Now().UnixNano())
                time.Sleep(time.Duration(rand.Intn(50)) * time.Millisecond)
                lock.Lock()
                defer lock.Unlock()
                sum += num
                c <- num
            }(i)
        }
    
        // 从通道接收数据并打印进度条
        for i := 0; i < numIterations; i++ {
            <-c
            fmt.Printf("\rProgress: %f%", float64(i)/float64(numIterations)*100)
        }
    
        // 等待所有 Goroutine 完成
        time.Sleep(time.Second)
    
        fmt.Println("\nFinal sum:", sum)
    }
    Salin selepas log masuk
  • Dalam program ini, kami menggunakan paip dan kunci mutex untuk melaksanakan sambungan antara fungsi dan Goroutine Interaksi: sum
  • Mutex melindungi pembolehubah yang diakses serentak
  • untuk memastikan integriti data.
  • Goroutine menghantar hasil penjumlahan ke saluran paip.

Fungsi utama membaca keputusan daripada paip dan mencetak bar kemajuan.

🎜🎜Melalui mekanisme ini, Goroutine boleh melaksanakan tugas penjumlahan secara serentak, dan fungsi utama boleh menjejaki kemajuan dan mengumpul hasil akhir. 🎜

Atas ialah kandungan terperinci Apakah mekanisme interaksi antara fungsi golang dan goroutine?. 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