Rumah >pembangunan bahagian belakang >Golang >Cara menggunakan Goroutines untuk mengendalikan tugas tak segerak dalam bahasa Go

Cara menggunakan Goroutines untuk mengendalikan tugas tak segerak dalam bahasa Go

王林
王林asal
2023-07-22 13:21:161333semak imbas

Cara menggunakan Goroutines untuk mengendalikan tugas tak segerak dalam bahasa Go

Abstrak: Goroutines ialah utas ringan dalam bahasa Go yang boleh melaksanakan pelaksanaan tugasan serentak. Artikel ini akan memperkenalkan penggunaan asas Goroutines dan menggabungkannya dengan contoh kod untuk menggambarkan cara menggunakan Goroutines untuk mengendalikan tugas tak segerak dalam bahasa Go.

Pengenalan:
Dengan pembangunan perkakasan komputer dan populariti pemproses berbilang teras, pembangun selalunya perlu memproses tugasan secara selari untuk meningkatkan prestasi program. Dalam model benang tradisional, overhed yang disebabkan oleh penciptaan dan penukaran benang sering menjadi kesesakan pemprosesan serentak. Sebaliknya, kemunculan Goroutines telah sangat memudahkan pengaturcaraan serentak, membolehkan pembangun mencipta Goroutines ringan untuk mencapai pemprosesan tugas serentak tinggi.

1. Penggunaan asas Goroutines
Dalam bahasa Go, anda boleh mencipta Goroutine dengan menggunakan kata kunci "go". Setiap kali fungsi dipanggil, kata kunci "go" boleh ditambah di hadapan fungsi untuk menunjukkan bahawa fungsi itu akan dilaksanakan dalam bentuk Goroutine.

Contohnya:

func main() {
    go func() {
        // 这里是任务的执行逻辑
    }()
    // 其他的代码逻辑
}

Kuncinya terletak pada penggunaan kata kunci "go", yang membolehkan fungsi untuk tidak menyekat pelaksanaan utas utama apabila dipanggil, tetapi untuk kembali serta-merta. Dalam Goroutine, sebarang pernyataan Go yang sah boleh dilaksanakan, termasuk memanggil fungsi lain, melakukan pengiraan, mengakses data kongsi, dsb. Apabila tugas dalam Goroutine selesai, ia akan keluar secara automatik.

2. Contoh Goroutines memproses tugas tak segerak
Dalam pembangunan sebenar, kita selalunya perlu mengendalikan beberapa tugas tak segerak yang memakan masa, seperti permintaan rangkaian, membaca dan menulis fail, operasi pangkalan data, dsb. Menggunakan Goroutines boleh meningkatkan keupayaan pemprosesan serentak tugas-tugas ini dengan berkesan.

Yang berikut menggunakan contoh bacaan fail untuk menggambarkan cara menggunakan Goroutines untuk mengendalikan tugas tak segerak.

package main

import (
    "fmt"
    "io/ioutil"
    "sync"
)

func readFromFile(filename string, wg *sync.WaitGroup) {
    defer wg.Done()

    data, err := ioutil.ReadFile(filename)
    if err != nil {
        fmt.Printf("读取文件 %s 失败:%v
", filename, err)
        return
    }

    fmt.Printf("文件 %s 的内容:%s
", filename, data)
}

func main() {
    var wg sync.WaitGroup

    wg.Add(2)
    go readFromFile("file1.txt", &wg)
    go readFromFile("file2.txt", &wg)

    wg.Wait()
}

Dalam contoh kod di atas, kami menentukan fungsi readFromFile untuk membaca kandungan fail. Dalam fungsi utama, kami menetapkan bilangan Goroutine untuk menunggu dengan memanggil "wg.Add(2)". Apabila memulakan Goroutine, kami menghantar &wg sebagai parameter kepada fungsi readFromFile untuk memberitahu urutan utama apabila tugasan selesai.

Dalam fungsi readFromFile, kami menggunakan defer wg.Done() untuk memberitahu urutan utama bahawa tugasan telah selesai. Apabila kedua-dua Goroutine telah menyelesaikan tugas mereka, utas utama boleh menunggu untuk selesai dengan memanggil wg.Wait().

3. Kesimpulan
Artikel ini memperkenalkan penggunaan asas Goroutines dan cara mengendalikan tugas tak segerak melalui Goroutines. Berbanding dengan model benang tradisional, menggunakan Goroutines boleh membawa pemprosesan serentak yang lebih ringan, meningkatkan prestasi program. Dalam pembangunan sebenar, kami secara munasabah boleh menggunakan Goroutines untuk mengendalikan pelbagai jenis tugas mengikut keperluan khusus untuk mencapai pemprosesan serentak yang cekap.

Rujukan:
[1] Spesifikasi Bahasa Pengaturcaraan Go, https://golang.org/ref/spec
[2] The Go Blog, https://blog.golang.org/
[3] Go by Example , https://gobyexample.com/
[4] Go Concurrency Patterns, https://talks.golang.org/2012/concurrency.slide

Nota: Kod di atas adalah untuk rujukan sahaja dan mungkin perlu dilaraskan mengikut kepada keadaan dan pengubahsuaian tertentu.

Atas ialah kandungan terperinci Cara menggunakan Goroutines untuk mengendalikan tugas tak segerak dalam bahasa Go. 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