Rumah pembangunan bahagian belakang Golang Panduan Lanjutan untuk Pengaturcaraan Serentak di Golang: Kuasai Penggunaan Lanjutan Goroutines

Panduan Lanjutan untuk Pengaturcaraan Serentak di Golang: Kuasai Penggunaan Lanjutan Goroutines

Jul 17, 2023 am 11:16 AM
golang Pengaturcaraan serentak goroutines

Panduan Lanjutan untuk Pengaturcaraan Serentak di Golang: Kuasai penggunaan lanjutan Goroutines

Dengan pembangunan berterusan teknologi komputer, populariti pemproses berbilang teras dan kebangkitan pengkomputeran awan, pengaturcaraan serentak menjadi semakin penting. Sebagai bahasa untuk membangunkan program konkurensi tinggi, model konkurensi Golang menggunakan Goroutines dan Saluran sebagai terasnya, menjadikan pengaturcaraan serentak mudah dan cekap.

Artikel ini akan memperkenalkan penggunaan lanjutan Goroutines untuk membantu pembangun menggunakan lebih baik ciri serentak Golang dan meningkatkan prestasi dan kebolehpercayaan program. Kami akan menerangkan setiap konsep dan teknik melalui contoh kod.

  1. Permulaan dan penyegerakan Goroutines

Goroutine ialah unit terkecil yang mewakili tugas serentak di Golang A Goroutine ialah benang ringan. Untuk memulakan Goroutine, cuma tambahkan kata kunci "pergi" ke nama fungsi. Contohnya:

func main() {
    go printHello()
    time.Sleep(time.Second)
}

func printHello() {
    fmt.Println("Hello, World!")
}
Salin selepas log masuk

Dalam kod di atas, fungsi printHello() dimulakan sebagai Goroutine, yang akan mengeluarkan "Hello, World!" Untuk membiarkan fungsi utama menunggu sehingga Goroutine tamat, kami menggunakan time.Sleep(time.Second). printHello()函数被作为一个Goroutine启动,它会异步地输出"Hello, World!"。为了让主函数等待Goroutine结束,我们使用了time.Sleep(time.Second)

  1. 通过Channel进行Goroutines间通信

在Golang中,Goroutines之间的通信通常使用Channel来实现。Channel是一种类型安全的并发数据结构,用于在Goroutines之间传递数据。

func main() {
    ch := make(chan int)
    go produce(ch)
    go consume(ch)
    time.Sleep(time.Second)
}

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

func consume(ch <-chan int) {
    for num := range ch {
        fmt.Println("Received:", num)
    }
}
Salin selepas log masuk

上述代码中,我们定义了一个包含10个整数的Channel,produce()函数将0到9依次发送到该Channel中,consume()函数则从Channel中接收整数并打印。需要注意的是,在produce()函数中我们使用了close(ch)来关闭Channel,以通知consume()函数停止接收数据。

  1. Goroutines的调度和同步

在并发编程中,我们有时需要控制Goroutines的调度和同步,以避免竞争条件和死锁等问题。Golang提供了一些工具来实现这些功能,如WaitGroup、Mutex和Cond等。

func main() {
    var wg sync.WaitGroup
    wg.Add(2)
    go doWork(&wg)
    go doWork(&wg)
    wg.Wait()
    fmt.Println("All Goroutines completed.")
}

func doWork(wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Println("Doing work...")
    time.Sleep(time.Second)
}
Salin selepas log masuk

上述代码中,我们使用了sync.WaitGroup来等待两个Goroutines完成工作。在每个Goroutine开始和结束时,我们分别调用wg.Add(1)defer wg.Done()来增加和减少WaitGroup的计数。在主函数中,我们使用wg.Wait()

    Komunikasi antara Goroutines melalui Channel

    Di Golang, komunikasi antara Goroutines biasanya dilaksanakan menggunakan Channel. Saluran ialah struktur data serentak selamat jenis yang digunakan untuk menghantar data antara Goroutines.

    rrreee

    Dalam kod di atas, kami mentakrifkan Saluran yang mengandungi 10 integer Fungsi produce() menghantar 0 hingga 9 ke Saluran dalam urutan, consume() Fungsi. menerima integer daripada Saluran dan mencetaknya. Perlu diingat bahawa dalam fungsi produce() kami menggunakan close(ch) untuk menutup Saluran untuk memberitahu fungsi consume() kepada berhenti Terima data.

      🎜Penjadualan dan penyegerakan Goroutines🎜🎜🎜Dalam pengaturcaraan serentak, kadangkala kita perlu mengawal penjadualan dan penyegerakan Goroutines untuk mengelakkan masalah seperti keadaan perlumbaan dan kebuntuan. Golang menyediakan beberapa alatan untuk melaksanakan fungsi ini, seperti WaitGroup, Mutex dan Cond. 🎜rrreee🎜Dalam kod di atas, kami menggunakan sync.WaitGroup untuk menunggu dua Goroutine menyelesaikan kerja mereka. Pada permulaan dan penghujung setiap Goroutine, kami memanggil wg.Add(1) dan defer wg.Done() masing-masing untuk menambah dan mengurangkan kiraan WaitGroup. Dalam fungsi utama, kami menggunakan wg.Wait() untuk menunggu semua Goroutine selesai. 🎜🎜Ringkasan: 🎜🎜Artikel ini memperkenalkan penggunaan lanjutan Goroutines dalam pengaturcaraan serentak Golang, termasuk memulakan dan menyegerakkan Goroutines, berkomunikasi antara Goroutines melalui Saluran dan menjadualkan serta menyegerakkan Goroutines. Dengan menguasai penggunaan lanjutan ini, pembangun boleh menggunakan ciri serentak Golang dengan lebih baik dan meningkatkan prestasi dan kebolehpercayaan program. 🎜🎜Dalam aplikasi praktikal, kami juga boleh menggunakan primitif dan alatan serentak lain yang disediakan oleh Golang untuk melaksanakan fungsi yang lebih kompleks, seperti menggunakan operasi atom untuk melaksanakan kemas kini atom kepada sumber yang dikongsi, menggunakan penyataan Pilih untuk melaksanakan pemultipleksan, dsb. Melalui pembelajaran dan amalan berterusan, rizab teknikal dan pengalaman pengaturcaraan serentak akan diperkaya secara beransur-ansur dan dapat menangani senario yang lebih praktikal dan masalah yang kompleks. 🎜

Atas ialah kandungan terperinci Panduan Lanjutan untuk Pengaturcaraan Serentak di Golang: Kuasai Penggunaan Lanjutan Goroutines. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

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

Alat AI Hot

Undresser.AI Undress

Undresser.AI Undress

Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover

AI Clothes Remover

Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool

Undress AI Tool

Gambar buka pakaian secara percuma

Clothoff.io

Clothoff.io

Penyingkiran pakaian AI

AI Hentai Generator

AI Hentai Generator

Menjana ai hentai secara percuma.

Alat panas

Notepad++7.3.1

Notepad++7.3.1

Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina

SublimeText3 versi Cina

Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1

Hantar Studio 13.0.1

Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6

Dreamweaver CS6

Alat pembangunan web visual

SublimeText3 versi Mac

SublimeText3 versi Mac

Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang? Bagaimana untuk membaca dan menulis fail dengan selamat menggunakan Golang? Jun 06, 2024 pm 05:14 PM

Membaca dan menulis fail dengan selamat dalam Go adalah penting. Garis panduan termasuk: Menyemak kebenaran fail Menutup fail menggunakan tangguh Mengesahkan laluan fail Menggunakan tamat masa konteks Mengikuti garis panduan ini memastikan keselamatan data anda dan keteguhan aplikasi anda.

Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang? Bagaimana untuk mengkonfigurasi kolam sambungan untuk sambungan pangkalan data Golang? Jun 06, 2024 am 11:21 AM

Bagaimana untuk mengkonfigurasi pengumpulan sambungan untuk sambungan pangkalan data Go? Gunakan jenis DB dalam pakej pangkalan data/sql untuk membuat sambungan pangkalan data untuk mengawal bilangan maksimum sambungan serentak;

Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Bagaimana untuk menyimpan data JSON ke pangkalan data di Golang? Jun 06, 2024 am 11:24 AM

Data JSON boleh disimpan ke dalam pangkalan data MySQL dengan menggunakan perpustakaan gjson atau fungsi json.Unmarshal. Pustaka gjson menyediakan kaedah kemudahan untuk menghuraikan medan JSON dan fungsi json.Unmarshal memerlukan penuding jenis sasaran kepada data JSON unmarshal. Kedua-dua kaedah memerlukan penyediaan pernyataan SQL dan melaksanakan operasi sisipan untuk mengekalkan data ke dalam pangkalan data.

Rangka Kerja Golang lwn Rangka Kerja Go: Perbandingan Seni Bina Dalaman dan Ciri Luaran Rangka Kerja Golang lwn Rangka Kerja Go: Perbandingan Seni Bina Dalaman dan Ciri Luaran Jun 06, 2024 pm 12:37 PM

Perbezaan antara rangka kerja GoLang dan rangka kerja Go ditunjukkan dalam seni bina dalaman dan ciri luaran. Rangka kerja GoLang adalah berdasarkan perpustakaan standard Go dan meluaskan fungsinya, manakala rangka kerja Go terdiri daripada perpustakaan bebas untuk mencapai tujuan tertentu. Rangka kerja GoLang lebih fleksibel dan rangka kerja Go lebih mudah digunakan. Rangka kerja GoLang mempunyai sedikit kelebihan dalam prestasi dan rangka kerja Go lebih berskala. Kes: gin-gonic (rangka Go) digunakan untuk membina REST API, manakala Echo (rangka kerja GoLang) digunakan untuk membina aplikasi web.

Bagaimana untuk mencari subrentetan pertama dipadankan dengan ungkapan biasa Golang? Bagaimana untuk mencari subrentetan pertama dipadankan dengan ungkapan biasa Golang? Jun 06, 2024 am 10:51 AM

Fungsi FindStringSubmatch mencari subrentetan pertama dipadankan dengan ungkapan biasa: fungsi mengembalikan hirisan yang mengandungi subrentetan yang sepadan, dengan elemen pertama ialah keseluruhan rentetan dipadankan dan elemen berikutnya ialah subrentetan individu. Contoh kod: regexp.FindStringSubmatch(teks,corak) mengembalikan sekeping subrentetan yang sepadan. Kes praktikal: Ia boleh digunakan untuk memadankan nama domain dalam alamat e-mel, contohnya: e-mel:="user@example.com", pattern:=@([^\s]+)$ untuk mendapatkan padanan nama domain [1].

Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Berubah dari front-end ke pembangunan back-end, adakah lebih menjanjikan untuk belajar Java atau Golang? Apr 02, 2025 am 09:12 AM

Laluan Pembelajaran Backend: Perjalanan Eksplorasi dari Front-End ke Back-End sebagai pemula back-end yang berubah dari pembangunan front-end, anda sudah mempunyai asas Nodejs, ...

Bagaimana untuk menggunakan zon waktu yang telah ditetapkan dengan Golang? Bagaimana untuk menggunakan zon waktu yang telah ditetapkan dengan Golang? Jun 06, 2024 pm 01:02 PM

Menggunakan zon waktu yang dipratentukan dalam Go termasuk langkah berikut: Import pakej "masa". Muatkan zon waktu tertentu melalui fungsi LoadLocation. Gunakan zon waktu yang dimuatkan dalam operasi seperti mencipta objek Masa, menghuraikan rentetan masa dan melaksanakan penukaran tarikh dan masa. Bandingkan tarikh menggunakan zon waktu yang berbeza untuk menggambarkan aplikasi ciri zon waktu yang telah ditetapkan.

Tutorial praktikal pembangunan rangka kerja Golang: Soalan Lazim Tutorial praktikal pembangunan rangka kerja Golang: Soalan Lazim Jun 06, 2024 am 11:02 AM

Soalan Lazim pembangunan rangka kerja Go: Pemilihan rangka kerja: Bergantung pada keperluan aplikasi dan pilihan pembangun, seperti Gin (API), Echo (boleh berskala), Beego (ORM), Iris (prestasi). Pemasangan dan penggunaan: Gunakan arahan gomod untuk memasang, mengimport rangka kerja dan menggunakannya. Interaksi pangkalan data: Gunakan perpustakaan ORM, seperti gorm, untuk mewujudkan sambungan dan operasi pangkalan data. Pengesahan dan kebenaran: Gunakan pengurusan sesi dan perisian tengah pengesahan seperti gin-contrib/sesi. Kes praktikal: Gunakan rangka kerja Gin untuk membina API blog ringkas yang menyediakan POST, GET dan fungsi lain.

See all articles