Rumah > pembangunan bahagian belakang > Golang > Bagaimana untuk Mengekalkan Bilangan Malar Goroutine yang Dijalankan Secara Serentak dalam Go?

Bagaimana untuk Mengekalkan Bilangan Malar Goroutine yang Dijalankan Secara Serentak dalam Go?

Patricia Arquette
Lepaskan: 2024-12-02 00:49:14
asal
914 orang telah melayarinya

How to Maintain a Constant Number of Simultaneously Running Goroutines in Go?

Threading Goroutines dalam Go: Menjalankan Nombor Malar Serentak

Alam Go concurrency menawarkan banyak bahan untuk menunggu penyiapan bilangan goroutine yang ditentukan. Walau bagaimanapun, cabaran yang berbeza muncul dengan sendirinya: memastikan pelaksanaan berterusan bilangan goroutin yang telah ditetapkan, dengan satu bermula apabila satu lagi berakhir.

Pertimbangkan senario dengan kuantiti tugasan yang banyak, seperti memproses data yang diambil daripada MySQL pangkalan data. Pendekatan naif mungkin memulakan sejumlah besar goroutin selari, pada masa yang sama melaksanakan ratusan ribu tugas. Sebaliknya, gelagat yang diingini mengehadkan gorout yang berjalan serentak kepada kiraan tetap (katakan, 20).

Corak konkurensi terkawal ini dikenali sebagai "keselarian sempadan." Melaksanakan corak ini dalam Go memerlukan penggunaan saluran struct kosong sebagai semafor, menentukan bilangan maksimum goroutin pekerja serentak. Berikut ialah ilustrasi:

package main

import "fmt"

func main() {
    maxGoroutines := 10
    guard := make(chan struct{}, maxGoroutines)

    for i := 0; i < 30; i++ {
        guard <- struct{}{} // blocks if guard channel is full
        go func(n int) {
            worker(n)
            <-guard // unlocks a slot in guard
        }(i)
    }
}

func worker(i int) { fmt.Println("doing work on", i) }
Salin selepas log masuk

Pelaksanaan ini memastikan bahawa tidak lebih daripada bilangan goroutine yang ditetapkan dilaksanakan serentak. Akibatnya, apabila goroutine pekerja selesai, goroutine baharu segera dilancarkan, mengekalkan tahap konkurensi yang diingini.

Artikel "Go Concurrency Patterns" meneroka lebih lanjut konsep ini dalam bahagian "Bounded parallelism"nya, memberikan lebih mendalam cerapan tentang teknik konkurensi yang penting ini.

Atas ialah kandungan terperinci Bagaimana untuk Mengekalkan Bilangan Malar Goroutine yang Dijalankan Secara Serentak dalam Go?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:php.cn
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
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan