Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang melaksanakan selari

Golang melaksanakan selari

WBOY
WBOYasal
2023-05-21 19:12:36552semak imbas

Dengan perkembangan pesat data besar, kecerdasan buatan dan teknologi lain, permintaan untuk prestasi tinggi dan keselarasan tinggi juga semakin tinggi. Dalam konteks ini, golang sangat popular sebagai bahasa pengaturcaraan berkonkurensi tinggi dan berprestasi tinggi. Antaranya, ciri selari golang merupakan salah satu ciri pentingnya yang membezakannya dengan bahasa lain. Artikel ini membincangkan terutamanya cara melaksanakan keselarian dalam golang dan peningkatan prestasi yang dibawa oleh keselarian.

1. Gambaran Keseluruhan Keselarian

Sejajar merujuk kepada pelaksanaan berbilang tugasan pada masa yang sama. Pada CPU tunggal, hanya satu arahan boleh dilaksanakan pada satu-satu masa, tetapi masa pelaksanaan setiap arahan adalah sangat singkat CPU menyelesaikan pelbagai tugas dari perspektif pengguna melalui putaran pantas. Putaran pantas ini menyebabkan masa penukaran tugas menjadi sangat singkat, dan nampaknya berbilang tugasan sedang dilakukan pada masa yang sama. Ini adalah selari.

Dalam aplikasi praktikal, kami biasanya menggunakan teknologi selari untuk mengendalikan senario perniagaan berkonkurensi tinggi dan berketumpatan tinggi Dengan memanfaatkan ciri-ciri CPU berbilang teras, tugasan diberikan kepada berbilang teras untuk pelaksanaan serentak untuk meningkatkan. kecekapan pelaksanaan. Dalam golang, goroutine dipanggil benang ringan Ia lebih ringan dan cekap daripada benang, dan memulakan goroutine memerlukan sedikit overhed. Oleh itu, golang secara semula jadi sesuai untuk melaksanakan operasi selari.

2. Goroutine parallelism

Dalam golang, kita boleh melaksanakan operasi selari melalui goroutine. Goroutine ialah utas ringan yang diuruskan oleh sistem runtime golang dan tidak menggunakan banyak memori seperti utas sistem pengendalian Oleh itu, kita boleh memulakan banyak goroutine pada masa yang sama, mengurangkan masa menunggu tugasan dan memperbaik pelaksanaan program. kecekapan. Mari kita lihat bagaimana untuk memulakan goroutine.

1. Tentukan goroutine

Cara untuk mentakrifkan goroutine dalam golang adalah sangat mudah Anda hanya perlu menambah kata kunci pergi sebelum badan fungsi yang perlu dilaksanakan secara bebas. Contohnya:

go func() {
    fmt.Println("Hello, goroutine!")
}()

2. Mulakan goroutine

Memulakan goroutine adalah sangat mudah, hanya panggil fungsi. Contohnya:

func main() {
    go func() {
        fmt.Println("Hello, goroutine!")
    }()
    fmt.Println("Hello, main!")
    time.Sleep(time.Second)
}

Dalam kod di atas, kami memulakan goroutine untuk mencetak ayat, manakala fungsi utama terus mencetak perkataannya sendiri dan berhenti seketika selama 1 saat. Apabila kita menjalankan program pada masa ini, kita akan melihat bahawa fungsi utama dan goroutine akan mencetak secara bergantian Hello, main! dan Hello, goroutine!, yang membuktikan bahawa kedua-dua fungsi tersebut dilaksanakan secara selari dalam goroutine yang berbeza.

3. Saluran

Saluran ialah mekanisme komunikasi antara benang yang disediakan oleh golang. Saluran mempunyai dua titik akhir, hujung penghantaran dan penerimaan. Kita boleh membuat saluran melalui kata kunci make, dan kemudian menggunakan <- untuk memindahkan data. Contohnya:

func goroutineFunc(c chan int) {
    c <- 1
}

func main() {
    c := make(chan int)
    go goroutineFunc(c)
    result := <-c
    fmt.Println(result)
}

Dalam kod di atas, kami mencipta saluran c semasa memulakan goroutine, kemudian gunakan c <- 1 untuk menulis 1 ke saluran dalam goroutine, dan akhirnya membacanya melalui result := <-c data. Kaedah ini boleh menukar data dalam gorouti yang berbeza dan mencapai operasi selari berskala besar.

3. Pengkomputeran Selari

Jika kita ingin melakukan pengkomputeran selari, kita perlu memperuntukkan tugas pengkomputeran kepada gorouti yang berbeza untuk pelaksanaan dan pertukaran data melalui saluran. Di bawah kami menggunakan kod sampel untuk menunjukkan cara menggunakan golang untuk melaksanakan pengkomputeran selari.

1. Pengiraan selari nilai pi

func pi(n int) float64 {
    ch := make(chan float64)
    for i := 0; i < n; i++ {
        go func(start, end int) {
            sum := 0.0
            for j := start; j < end; j++ {
                x := (float64(j) + 0.5) / float64(n)
                sum += 4.0 / (1.0 + x*x)
            }
            ch <- sum
        }(i*n/n, (i+1)*n/n)
    }
    result := 0.0
    for i := 0; i < n; i++ {
        result += <-ch
    }
    return result / float64(n)
}

func main() {
    fmt.Println(pi(10000))
}

Dalam kod di atas, kita mula-mula mencipta saluran ch dengan panjang n, dan kemudian menggunakan n goroutine untuk mengira dan menulis hasil pengiraan ke tengah saluran. Akhir sekali, kita membaca jumlah semua hasil daripada saluran dan mengira nilai π. Melalui pengkomputeran selari, kita boleh meningkatkan kelajuan pengiraan dengan banyak.

2. Pengiraan selari pendaraban matriks

func MatrixMul(a, b [][]int) [][]int {
    m, n, p := len(a), len(a[0]), len(b[0])
    c := make([][]int, m)
    for i := 0; i < m; i++ {
        c[i] = make([]int, p)
    }

    ch := make(chan int)
    for i := 0; i < m; i++ {
        for j := 0; j < p; j++ {
            go func(x, y int) {
                sum := 0
                for k := 0; k < n; k++ {
                    sum += a[x][k] * b[k][y]
                }
                ch <- sum
            }(i, j)
        }
    }

    for i := 0; i < m; i++ {
        for j := 0; j < p; j++ {
            c[i][j] = <-ch
        }
    }

    return c
}

func main() {
    a := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
    b := [][]int{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}}
    fmt.Println(MatrixMul(a, b))
}

Dalam kod di atas, kami menggunakan goroutine untuk mengira hasil darab matriks secara selari. Agihkan tugas pengkomputeran kepada goroutin, dan kemudian tukar data melalui saluran. Akhirnya kami membaca semua keputusan dari saluran dan membentuk matriks produk. Melalui pengkomputeran selari, kami dapat meningkatkan kelajuan pengkomputeran dan mengurangkan kos pengkomputeran.

Ringkasan

Artikel ini terutamanya memperkenalkan cara menggunakan goroutine untuk melaksanakan pengkomputeran selari dalam golang, dan cara menggunakan goroutine dan saluran. Melalui pengkomputeran selari, kami boleh memperuntukkan tugas pengkomputeran kepada berbilang goroutin untuk meningkatkan kecekapan menjalankan program dan sesuai untuk mengendalikan senario perniagaan berkonkurensi tinggi dan berketumpatan tinggi. Mekanisme goroutin dan saluran terbina dalam Golang menjadikan operasi selari lebih mudah dan cekap berbanding bahasa lain.

Atas ialah kandungan terperinci Golang melaksanakan selari. 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
Artikel sebelumnya:pemindahan nod golangArtikel seterusnya:pemindahan nod golang