Rumah pembangunan bahagian belakang Golang Penyahsulitan: Strategi menunggu fungsi utama dalam bahasa Go

Penyahsulitan: Strategi menunggu fungsi utama dalam bahasa Go

Mar 10, 2024 pm 02:06 PM
pergi bahasa lorong serentak Mekanisme penyegerakan Fungsi utama strategi menunggu:

Penyahsulitan: Strategi menunggu fungsi utama dalam bahasa Go

Penyahsulitan: Strategi menunggu bagi fungsi utama dalam bahasa Go memerlukan contoh kod khusus

Bahasa Go ialah bahasa pengaturcaraan serentak dan strategi menunggu bagi fungsi utama adalah amat penting. Fungsi utama perlu memastikan ia keluar selepas semua goroutine telah dilaksanakan, jika tidak, ia boleh menyebabkan program ditamatkan lebih awal. Artikel ini akan memperkenalkan beberapa strategi menunggu fungsi utama biasa dan memberikan contoh kod khusus.

Dalam bahasa Go, WaitGroup atau saluran dalam pakej penyegerakan biasanya digunakan untuk melaksanakan menunggu dalam fungsi utama. Di bawah ini kami akan memperkenalkan aplikasi khusus kedua-dua kaedah ini masing-masing.

  1. Gunakan WaitGroup dalam pakej penyegerakan

WaitGroup ialah mekanisme penyegerakan yang boleh digunakan untuk menunggu penghujung kumpulan goroutine. Kaedah Tambah digunakan terutamanya untuk menambah bilangan goroutin menunggu, kaedah Selesai digunakan untuk mengurangkan bilangan, dan kaedah Tunggu menunggu semua goroutin dilaksanakan. Berikut ialah contoh kod:

package main

import (
    "fmt"
    "sync"
)

func worker(id int, wg *sync.WaitGroup) {
    defer wg.Done()
    fmt.Printf("Worker %d is working
", id)
}

func main() {
    var wg sync.WaitGroup

    for i := 1; i <= 3; i++ {
        wg.Add(1)
        go worker(i, &wg)
    }

    wg.Wait()
    fmt.Println("All workers have finished")
}
Salin selepas log masuk

Dalam kod di atas, kami mentakrifkan fungsi pekerja untuk mensimulasikan goroutine yang perlu dilaksanakan, dan kemudian mulakan 3 goroutine pekerja dalam fungsi utama dan tunggu mereka menyelesaikan pelaksanaan melalui Tunggu kaedah.

  1. Gunakan saluran

Satu lagi fungsi utama strategi menunggu adalah menggunakan saluran. Kita boleh mencipta saluran dan membiarkan setiap goroutine menghantar isyarat kepada saluran ini apabila ia tamat Fungsi utama boleh menerima isyarat ini untuk menentukan sama ada semua goroutine telah dilaksanakan. Berikut ialah kod sampel:

package main

import "fmt"

func worker(id int, ch chan bool) {
    fmt.Printf("Worker %d is working
", id)
    ch <- true
}

func main() {
    numWorkers := 3
    ch := make(chan bool, numWorkers)

    for i := 1; i <= numWorkers; i++ {
        go worker(i, ch)
    }

    for i := 1; i <= numWorkers; i++ {
        <-ch
    }

    fmt.Println("All workers have finished")
}
Salin selepas log masuk

Dalam contoh ini, kami mencipta saluran dengan kapasiti numWorkers dan membenarkan setiap goroutine pekerja menghantar nilai ke saluran ini pada penghujungnya. Fungsi utama menerima nilai ini untuk menentukan sama ada semua goroutine telah dilaksanakan.

Ringkasan

Melalui dua contoh kod khusus di atas, kami telah mempelajari tentang dua cara biasa untuk melaksanakan strategi menunggu fungsi utama dalam bahasa Go: menggunakan WaitGroup dalam pakej penyegerakan dan menggunakan saluran. Dalam pembangunan sebenar, adalah sangat penting untuk memilih strategi menunggu yang sesuai mengikut situasi tertentu, bagi memastikan program boleh menunggu dengan betul untuk semua goroutine selesai melaksanakan sebelum keluar semasa pelaksanaan serentak.

Atas ialah kandungan terperinci Penyahsulitan: Strategi menunggu fungsi utama dalam bahasa Go. 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

Tag artikel 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)

Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang May 03, 2024 pm 12:15 PM

Cara menggunakan refleksi untuk mengakses medan dan kaedah persendirian dalam golang

Aplikasi konkurensi dan coroutine dalam reka bentuk API Golang Aplikasi konkurensi dan coroutine dalam reka bentuk API Golang May 07, 2024 pm 06:51 PM

Aplikasi konkurensi dan coroutine dalam reka bentuk API Golang

Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang? Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang? May 04, 2024 pm 12:45 PM

Pengaturcaraan Serentak C++: Bagaimana untuk mengendalikan komunikasi antara benang?

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go May 08, 2024 pm 03:09 PM

Perbezaan antara ujian prestasi dan ujian unit dalam bahasa Go

Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing? Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing? May 07, 2024 pm 02:06 PM

Apakah rangka kerja dan perpustakaan pengaturcaraan serentak dalam C++? Apakah kelebihan dan batasan masing-masing?

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang? May 07, 2024 pm 12:39 PM

Apakah perangkap yang perlu kita perhatikan semasa mereka bentuk sistem teragih dengan teknologi Golang?

Panduan untuk menguji unit fungsi serentak Go Panduan untuk menguji unit fungsi serentak Go May 03, 2024 am 10:54 AM

Panduan untuk menguji unit fungsi serentak Go

Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin May 08, 2024 pm 09:42 PM

Perpustakaan dan alatan teknologi Golang yang digunakan dalam pembelajaran mesin

See all articles