Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Ciri bahasa Golang didedahkan: pengaturcaraan serentak dan penyegerakan berbilang benang

Ciri bahasa Golang didedahkan: pengaturcaraan serentak dan penyegerakan berbilang benang

王林
王林asal
2023-07-17 09:48:131375semak imbas

Ciri bahasa Golang didedahkan: pengaturcaraan serentak dan penyegerakan berbilang benang

Golang ialah bahasa pengaturcaraan moden yang direka untuk menyelesaikan masalah serentak berskala besar. Model pengaturcaraan serentak membolehkan pembangun membuat dan mengurus berbilang gorout dengan mudah untuk mencapai pelaksanaan serentak yang cekap. Dalam artikel ini, kami akan mendedahkan ciri pengaturcaraan serentak Golang dan meneroka cara menyegerakkan dalam berbilang rangkaian.

Model pengaturcaraan serentak Golang adalah berdasarkan goroutin dan saluran. Goroutine ialah benang ringan yang boleh dilaksanakan secara selari. Dengan menggunakan kata kunci "pergi" kita boleh mencipta goroutine yang boleh berjalan di latar belakang tanpa menyekat bahagian lain program. Berikut ialah contoh kod:

package main

import (
    "fmt"
    "time"
)

func sayHello() {
    for i := 0; i < 5; i++ {
        fmt.Println("Hello!")
        time.Sleep(time.Millisecond * 500)
    }
}

func main() {
    go sayHello()
    time.Sleep(time.Second * 3)
    fmt.Println("Program End")
}

Dalam kod di atas, kami telah mencipta fungsi yang dipanggil sayHello dan memulakan goroutine dalam fungsi utama menggunakan kata kunci "pergi". Goroutine akan segera mula menjalankan fungsi sayHello tanpa menunggu kod lain untuk dilaksanakan. Pada masa yang sama, fungsi utama terus dilaksanakan, dan selepas menunggu selama 3 saat, "Tamat Program" dikeluarkan.

Selain goroutine, saluran juga merupakan mekanisme teras pengaturcaraan serentak di Golang. Saluran adalah jenis khas yang digunakan untuk komunikasi antara goroutine. Melalui saluran, goroutine boleh menghantar dan menerima data untuk mencapai perkongsian dan penyegerakan data. Berikut ialah contoh kod:

package main

import (
    "fmt"
    "time"
)

func counter(c chan<- int) {
    for i := 0; i < 5; i++ {
        c <- i
        time.Sleep(time.Second)
    }
    close(c)
}

func printer(c <-chan int) {
    for num := range c {
        fmt.Println("Num:", num)
        time.Sleep(time.Millisecond * 500)
    }
}

func main() {
    c := make(chan int)
    go counter(c)
    printer(c)
}

Dalam kod di atas, kami telah mencipta dua fungsi: kaunter dan pencetak. Fungsi kaunter bertanggungjawab untuk menghantar data ke saluran, dan fungsi pencetak bertanggungjawab untuk menerima data daripada saluran dan mencetaknya. Untuk saluran yang menghantar data, kami menggunakan chan<- int untuk mengehadkannya kepada hanya menghantar data untuk saluran yang menerima data, kami menggunakan <-chan int untuk mengehadkannya kepada hanya menerima data; Dengan cara ini, kami boleh mematuhi peraturan menghantar dan menerima data dengan lebih baik semasa menulis kod.

Dalam fungsi utama, kami mula-mula membuat saluran, dan kemudian memulakan goroutine untuk melaksanakan fungsi kaunter untuk menghantar data ke saluran. Seterusnya, fungsi pencetak dipanggil dalam fungsi utama, yang menerima data daripada saluran dan mencetaknya. Melalui saluran, kami merealisasikan penyegerakan data dan perkongsian antara fungsi kaunter dan fungsi pencetak.

Untuk meringkaskan, model pengaturcaraan serentak Golang menyediakan cara yang mudah dan berkuasa untuk mengendalikan tugas serentak. Dengan menggunakan goroutine dan saluran, pembangun boleh membuat dan mengurus berbilang tugasan yang dilaksanakan serentak dengan mudah. Pada masa yang sama, Golang menyediakan pelbagai mekanisme penyegerakan, seperti kunci, pembolehubah keadaan dan operasi atom, untuk membantu pembangun menyelesaikan isu penyegerakan dan pengecualian bersama di bawah pelbagai benang. Menguasai ciri pengaturcaraan serentak ini akan membawa prestasi dan kebolehpercayaan yang lebih tinggi kepada program kami.

Atas ialah kandungan terperinci Ciri bahasa Golang didedahkan: pengaturcaraan serentak dan penyegerakan berbilang benang. 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