Rumah >pembangunan bahagian belakang >Golang >Artifak pengaturcaraan serentak Golang: Goroutines, alat yang berkuasa untuk mempercepatkan pembangunan aplikasi

Artifak pengaturcaraan serentak Golang: Goroutines, alat yang berkuasa untuk mempercepatkan pembangunan aplikasi

WBOY
WBOYasal
2023-07-17 20:45:111120semak imbas

Artifak pengaturcaraan serentak Golang: Goroutines, alat yang berkuasa untuk mempercepatkan pembangunan aplikasi

Pengenalan
Dengan pembangunan Internet, aplikasi kami semakin perlu mengendalikan lebih banyak tugas serentak. Untuk memberikan prestasi dan responsif yang lebih baik apabila menangani tugas serentak ini, bahasa Go menyediakan alat pengaturcaraan serentak yang berkuasa-Goroutines, yang sudah pasti menjadi alat yang berkuasa untuk pembangun Golang. Artikel ini akan memperkenalkan konsep asas dan penggunaan Goroutines, dan menunjukkan keupayaan pemprosesan serentak yang berkuasa melalui contoh kod.

1. Konsep Goroutines
Groutines ialah benang ringan yang diuruskan oleh sistem masa jalan bahasa Go. Berbanding dengan rangkaian tradisional, penciptaan dan pemusnahan overhed Goroutines adalah sangat kecil, dan beribu-ribu Goroutines boleh dijalankan serentak. Ini membolehkan kami menulis atur cara serentak dengan lebih ringkas tanpa perlu memberi terlalu banyak perhatian kepada isu penjadualan dan penyegerakan benang asas.

2 Penciptaan dan pengendalian Goroutines
Dalam bahasa Go, kita boleh memulakan Goroutine baharu melalui kata kunci go. Kod contoh berikut menunjukkan cara mencipta dan menjalankan Goroutine mudah:

package main

import (
    "fmt"
    "time"
)

func main() {
    go printNumbers()
    go printAlphabets()

    time.Sleep(3 * time.Second) // 等待三秒钟,让Goroutines有足够的时间执行

    fmt.Println("Main goroutine 结束")
}

func printNumbers() {
    for i := 1; i <= 5; i++ {
        time.Sleep(500 * time.Millisecond) // 500毫秒
        fmt.Printf("%d ", i)
    }
}

func printAlphabets() {
    for i := 'a'; i <= 'e'; i++ {
        time.Sleep(300 * time.Millisecond) // 300毫秒
        fmt.Printf("%c ", i)
    }
}

Dalam kod di atas, kami telah mencipta dua Goroutine: printNumbers dan printAlphabets. Kedua-dua Goroutine ini mencetak nombor dan huruf masing-masing, dan menggunakan kelewatan tertentu antara setiap aksara. Dalam fungsi utama, kami memulakan kedua-dua Goroutine ini dan menunggu tiga saat sepanjang masa. Fungsi Sleep() untuk memberi mereka masa yang cukup untuk dilaksanakan. Akhir sekali, kami mengeluarkan "Main goroutine end" untuk menunjukkan penghujung fungsi utama.

3. Interaksi serentak Goroutines
Selain berjalan secara bebas, Goroutines juga boleh berinteraksi secara serentak melalui saluran. Saluran adalah primitif yang disediakan oleh Golang untuk pemindahan data yang selamat dan penyegerakan antara berbilang Goroutine. Kod contoh berikut menunjukkan cara menggunakan saluran untuk menghantar data antara dua Goroutine:

package main

import "fmt"

func main() {
    done := make(chan bool)

    go greet(done)
    <-done

    fmt.Println("Main goroutine 结束")
}

func greet(done chan bool) {
    fmt.Println("Hello, 世界!")

    done <- true
}

Dalam kod di atas, kami mencipta saluran yang telah selesai dan menghantarnya ke fungsi salam. Dalam fungsi salam, kami mencetak "Hello, dunia!" dan pada akhirnya menghantar isyarat penyiapan ke saluran melalui done

Kesimpulan
Goroutines ialah alat pengaturcaraan serentak yang berkuasa di Golang, yang boleh memudahkan pemprosesan aplikasi serentak. Dengan mencipta dan menjalankan berbilang Goroutine, kami boleh menggunakan sumber pemproses berbilang teras dengan berkesan dan meningkatkan prestasi dan responsif program. Melalui penggunaan saluran, kami boleh memindahkan dan menyegerakkan data dengan selamat antara berbilang Goroutine. Saya harap artikel ini dapat membantu anda lebih memahami dan menggunakan Goroutines serta mempercepatkan proses pembangunan aplikasi anda.

Atas ialah kandungan terperinci Artifak pengaturcaraan serentak Golang: Goroutines, alat yang berkuasa untuk mempercepatkan pembangunan aplikasi. 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