Rumah > pembangunan bahagian belakang > Golang > Concurrency, Goroutines, dan Saluran Di GO: Kajian

Concurrency, Goroutines, dan Saluran Di GO: Kajian

DDD
Lepaskan: 2025-01-30 00:03:10
asal
373 orang telah melayarinya

Artikel ini meneroka ciri -ciri konkurensi Go, yang memberi tumpuan kepada goroutin dan saluran. Concurrency membolehkan pengendalian pelbagai tugas seolah -olah pada masa yang sama, walaupun tidak semestinya secara serentak. Goroutine, benang ringan Go, dicipta menggunakan kata kunci go, membolehkan operasi serentak. Saluran memudahkan komunikasi dan penyegerakan antara goroutine, membolehkan pertukaran data. Menghantar data penggunaan ch <- value, semasa menerima penggunaan value := <- ch.

Contoh tarik docker seperti menunjukkan konsep-konsep ini:

package main

import (
    "fmt"
    "math/rand"
    "os"
    "strconv"
    "sync"
    "time"
)

func main() {
    rand.Seed(time.Now().UnixNano())

    concurrency, _ := strconv.Atoi(os.Args[1]) // Get concurrency level from command line

    if concurrency <= 0 {
        concurrency = 100 // Default concurrency
    }

    progress := make([]int, concurrency)
    var mu sync.Mutex
    var wg sync.WaitGroup
    wg.Add(concurrency)

    for i := 0; i < concurrency; i++ {
        go func(idx int) {
            defer wg.Done()
            for progress[idx] < 100 {
                mu.Lock()
                if progress[idx] >= 100 {
                    mu.Unlock()
                    break
                }
                inc := rand.Intn(10) + 1
                progress[idx] += inc
                if progress[idx] > 100 {
                    progress[idx] = 100
                }
                mu.Unlock()
                time.Sleep(time.Duration(rand.Intn(400)+100) * time.Millisecond)
            }
        }(i)
    }

    done := make(chan struct{})
    go func() {
        wg.Wait()
        close(done)
    }()

    <-done // Wait for all goroutines to complete

    fmt.Println("Progress:", progress)
}

Program ini menyerupai tugas serentak. Setiap Goroutine mengemas kini kemajuannya sehingga selesai. Mutex memastikan keselamatan benang apabila mengemas kini nilai kemajuan bersama. A Waitgroup Menyegerakkan Penyelesaian Goroutine.
Pembelajaran Utama Concurrency, Goroutines, and Channels in Go: A Study Contohnya menyoroti penggunaan kata kunci

untuk penciptaan goroutine dan pemprosesan serentak. Ia menunjukkan bagaimana Goroutine mengendalikan pelbagai petunjuk kemajuan secara serentak.

Eksplorasi lanjut

go Eksplorasi ini menimbulkan persoalan mengenai fungsi

(kenaikan/penurunan kaunter dan menyekat dengan

), mutexes (mencegah keadaan perlumbaan), dan akibat menghilangkannya. Bendera

untuk mengesan keadaan perlumbaan menjamin siasatan lanjut.

Atas ialah kandungan terperinci Concurrency, Goroutines, dan Saluran Di GO: Kajian. 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
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan