Rumah > pembangunan bahagian belakang > Golang > Bagaimanakah fungsi golang berinteraksi dengan goroutin?

Bagaimanakah fungsi golang berinteraksi dengan goroutin?

WBOY
Lepaskan: 2024-05-04 12:24:02
asal
640 orang telah melayarinya

Fungsi Go berinteraksi dengan Goroutine dengan menghantar data melalui saluran, kumpulan tunggu atau aliran pelaksanaan kawalan saluran, mutex atau tugas penyegerakan saluran: Menghantar data: Gunakan saluran sebagai baris gilir FIFO untuk menghantar dan menerima nilai daripada fungsi ke coroutine. Kawal aliran pelaksanaan: Gunakan kumpulan tunggu untuk menunggu coroutine menyelesaikan pelaksanaan, atau gunakan saluran untuk memberitahu coroutine untuk melaksanakan operasi tertentu. Tugas penyegerakan: Gunakan mutex atau saluran untuk menyegerakkan sumber yang diakses secara serentak untuk memastikan bahawa hanya satu coroutine mengakses sumber pada satu masa.

Bagaimanakah fungsi golang berinteraksi dengan goroutin?

Bagaimanakah fungsi Go berinteraksi dengan Goroutines?

Dalam Go, Goroutines ialah utas ringan yang dilaksanakan serentak. Mereka membenarkan anda menjalankan kod secara selari, meningkatkan prestasi aplikasi. Fungsi boleh berinteraksi dengan coroutine untuk mengawal aliran pelaksanaan, menghantar data dan menyegerakkan tugasan.

Melalui data

Data boleh dihantar daripada fungsi kepada coroutine melalui saluran. Saluran ialah baris gilir FIFO (masuk dahulu, keluar dahulu) yang membolehkan coroutine menerima dan menghantar nilai daripada fungsi. Contoh berikut menunjukkan cara menggunakan saluran:

package main

import "fmt"

func sendData(ch chan<- int) {
    for i := 0; i < 10; i++ {
        ch <- i
    }
    close(ch)
}

func receiveData(ch <-chan int) {
    for {
        data, ok := <-ch
        if !ok {
            return
        }
        fmt.Println("Received:", data)
    }
}

func main() {
    ch := make(chan int)
    go sendData(ch)
    receiveData(ch)
}
Salin selepas log masuk

Mengawal aliran pelaksanaan

Anda boleh menggunakan kumpulan tunggu atau saluran untuk mengawal aliran pelaksanaan coroutine. Kumpulan tunggu membolehkan anda menunggu sehingga semua coroutine selesai melaksanakan, manakala saluran boleh digunakan untuk memberitahu coroutine untuk melakukan tindakan tertentu. Contoh berikut menunjukkan cara menggunakan kumpulan tunggu:

package main

import (
    "fmt"
    "sync"
)

var wg sync.WaitGroup

func task(i int) {
    fmt.Println("Task", i)
    wg.Done()
}

func main() {
    for i := 0; i < 10; i++ {
        wg.Add(1)
        go task(i)
    }
    wg.Wait()
}
Salin selepas log masuk

Tugas penyegerakan

Sumber yang diakses secara serentak boleh disegerakkan melalui mutex atau saluran. Mutex mutex membenarkan satu coroutine mengakses sumber pada satu masa. Saluran boleh digunakan untuk menyekat coroutine sehingga sumber tersedia. Contoh berikut menunjukkan cara menggunakan mutex:

package main

import (
    "fmt"
    "sync"
)

var mutex sync.Mutex

func task(data string) {
    mutex.Lock()
    fmt.Println(data)
    mutex.Unlock()
}

func main() {
    for i := 0; i < 10; i++ {
        go task(fmt.Sprintf("Task %d", i))
    }
}
Salin selepas log masuk

Atas ialah kandungan terperinci Bagaimanakah fungsi golang berinteraksi dengan goroutin?. 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