Rumah > pembangunan bahagian belakang > Golang > Cara menggunakan Goroutines untuk pengisihan selari dalam bahasa Go

Cara menggunakan Goroutines untuk pengisihan selari dalam bahasa Go

WBOY
Lepaskan: 2023-07-22 10:57:15
asal
1293 orang telah melayarinya

Cara menggunakan Goroutines untuk pengisihan selari dalam bahasa Go

Pengenalan:
Isihan selari ialah algoritma pengoptimuman biasa yang boleh meningkatkan kecekapan pengisihan. Dalam bahasa Go, operasi serentak boleh dilaksanakan dengan mudah menggunakan Goroutines, jadi pengisihan selari boleh digunakan dengan mudah pada senario sebenar. Artikel ini akan memperkenalkan cara menggunakan Goroutines untuk pengisihan selari dalam bahasa Go dan memberikan contoh kod yang sepadan.

Pengenalan kepada Goroutines:
Groutines ialah utas ringan dalam bahasa Go yang boleh melaksanakan berbilang tugas secara serentak dalam program. Berbanding dengan rangkaian tradisional, Goroutines adalah lebih murah untuk dibuat dan dimusnahkan, dan kerana kaedah komunikasi antara Goroutines adalah penghantaran mesej, masalah persaingan sumber biasa dalam rangkaian tradisional dielakkan.

Algoritma pengisihan selari:
Sebelum memperkenalkan cara menggunakan Goroutines untuk pengisihan selari, mari kita fahami algoritma pengisihan selari dahulu. Idea asas pengisihan selari adalah untuk membahagikan data untuk diisih kepada beberapa bahagian, menggunakan Goroutine yang berasingan untuk setiap bahagian untuk diisih, dan akhirnya menggabungkan hasil pengisihan setiap bahagian untuk mendapatkan urutan tertib terakhir.

Berikut ialah contoh kod yang dilaksanakan menggunakan algoritma pengisihan selari:

package main

import (
    "fmt"
    "math/rand"
    "sort"
    "sync"
)

func main() {
    // 生成待排序的随机数组
    data := generateData(100000)

    // 创建一个WaitGroup,用于等待所有Goroutine完成排序
    var wg sync.WaitGroup

    // 定义一个切片用于保存排序结果
    sortedData := make([]int, 0, len(data))

    // 定义每个Goroutine处理的数据的大小
    chunkSize := len(data) / 4

    // 根据数据的大小切分成若干部分,并分别启动Goroutine进行排序
    for i := 0; i < len(data); i += chunkSize {
        wg.Add(1)

        go func(start int) {
            defer wg.Done()

            end := start + chunkSize
            if end > len(data) {
                end = len(data)
            }

            // 使用标准库中的排序函数对数据进行排序
            sort.Ints(data[start:end])

            // 将排序结果合并到sortedData中
            sortedData = append(sortedData, data[start:end]...)
        }(i)
    }

    // 等待所有Goroutine完成
    wg.Wait()

    // 最后对sortedData进行一次整体排序,得到最终的有序序列
    sort.Ints(sortedData)

    // 打印排序结果
    fmt.Println(sortedData)
}

// 生成随机数据
func generateData(size int) []int {
    data := make([]int, size)
    for i := 0; i < size; i++ {
        data[i] = rand.Intn(size)
    }
    return data
}
Salin selepas log masuk

Analisis kod:

  1. Pertama, jana tatasusunan rawak untuk diisih.
  2. Buat sync.WaitGroup untuk menunggu sehingga semua Goroutine selesai mengisih. sync.WaitGroup用于等待所有的Goroutine完成排序。
  3. 创建一个切片sortedData用于保存排序结果。
  4. 根据数据大小将数据分成若干部分,并分别启动Goroutine进行排序。
  5. 每个Goroutine中使用sort.Ints对数据进行排序,并将排序结果合并到sortedData中。
  6. 等待所有Goroutine完成。
  7. 最后,对sortedData
  8. Buat kepingan sortedData untuk menyimpan hasil yang diisih.
  9. Bahagikan data kepada beberapa bahagian mengikut saiz data, dan mulakan Goroutine masing-masing untuk mengisih.

Gunakan sort.Ints dalam setiap Goroutine untuk mengisih data dan gabungkan hasil yang diisih ke dalam sortedData.

Tunggu sehingga semua Goroutine selesai. 🎜🎜Akhir sekali, lakukan pengisihan keseluruhan pada sortedData untuk mendapatkan urutan tertib terakhir. 🎜🎜Cetak hasil isihan. 🎜🎜🎜Ringkasan: 🎜Artikel ini memperkenalkan cara menggunakan Goroutines untuk pengisihan selari Dengan membahagikan data untuk diisih kepada beberapa bahagian, memulakan Goroutine secara berasingan untuk mengisih, dan akhirnya menggabungkan hasil pengisihan setiap bahagian untuk mendapatkan urutan tertib terakhir. . Dan contoh kod Go yang sepadan diberikan, dengan harapan dapat membantu pembaca dengan masalah pengisihan selari dalam pembangunan sebenar. 🎜

Atas ialah kandungan terperinci Cara menggunakan Goroutines untuk pengisihan selari dalam bahasa Go. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Label berkaitan:
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