Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Golang menggunakan Saluran untuk melaksanakan pengagihan tugas dan pengagregatan hasil

Golang menggunakan Saluran untuk melaksanakan pengagihan tugas dan pengagregatan hasil

王林
王林asal
2023-08-07 18:29:04864semak imbas

Golang menggunakan Saluran untuk melaksanakan pengagihan tugas dan pengagregatan hasil

Pengenalan:
Dalam pengaturcaraan serentak, pengagihan tugas dan pengagregatan hasil adalah keperluan biasa. Saluran di Golang menyediakan cara yang ringkas dan berkesan untuk melaksanakan corak pengagihan tugas dan pengagregatan hasil ini. Artikel ini akan memperkenalkan cara menggunakan Saluran untuk melaksanakan pengagihan tugas dan pengagregatan hasil serta memberikan contoh kod yang sepadan.

  1. Pengagihan tugas:
    Pengagihan tugas merujuk kepada pengagihan tugas kepada coroutine kerja serentak untuk diproses. Di Golang, satu atau lebih Saluran boleh digunakan untuk mengagihkan tugas. Senario biasa adalah untuk mendapatkan tugas daripada sumber data luaran dan menghantar tugasan ke saluran tugas untuk diproses oleh coroutine pekerja.

Berikut ialah contoh kod ringkas yang melaksanakan proses mendapatkan tugas daripada sumber data luaran dan menghantar tugasan ke saluran tugas:

package main

import (
    "fmt"
)

func main() {
    tasks := make(chan string)

    go func() {
        for i := 0; i < 10; i++ {
            task := fmt.Sprintf("Task %d", i)
            tasks <- task
        }
        close(tasks)
    }()

    for task := range tasks {
        fmt.Println(task)
    }
}

Dalam contoh di atas, kami mencipta tugas saluran jenis rentetan dan menghantar 10 tugas ke saluran melalui fungsi tanpa nama. Akhirnya, tugasan dalam saluran dilalui melalui kata kunci julat dan kandungan tugasan adalah output.

  1. Pengagregatan hasil:
    Pengagregatan hasil merujuk kepada pengagregatan hasil tugasan yang disiapkan oleh coroutine kerja. Di Golang, anda boleh menggunakan satu atau lebih Saluran untuk menerima hasil tugasan yang diselesaikan oleh coroutine pekerja dan mengagregatkan hasilnya. Senario biasa ialah menghantar hasil yang diproses oleh setiap coroutine pekerja ke saluran hasil, dan kemudian mengagregatkan hasil dengan merentasi saluran hasil.

Berikut ialah contoh kod ringkas yang melaksanakan proses menghantar hasil tugasan yang dilengkapkan oleh coroutine kerja ke saluran hasil, dan mengagregatkan hasil dengan merentasi saluran hasil:

package main

import (
    "fmt"
)

func worker(id int, tasks <-chan string, results chan<- string) {
    for task := range tasks {
        result := fmt.Sprintf("Worker %d processed %s", id, task)
        results <- result
    }
}

func main() {
    tasks := make(chan string)
    results := make(chan string)

    // 创建 3 个工作协程
    for i := 1; i <= 3; i++ {
        go worker(i, tasks, results)
    }

    // 向任务通道发送 10 个任务
    for i := 1; i <= 10; i++ {
        task := fmt.Sprintf("Task %d", i)
        tasks <- task
    }
    close(tasks)

    // 遍历结果通道,输出每个任务的处理结果
    for result := range results {
        fmt.Println(result)
    }
}

Dalam contoh di atas, kami mencipta Dua saluran, tugasan dan keputusan, dibuat pengagihan tugas dan pengagregatan hasil dicapai dengan menghantar tugasan ke saluran tugas dan menerima keputusan melalui saluran keputusan. Pada masa yang sama, 3 coroutine kerja dicipta untuk memproses tugasan dan hasil pemprosesan dihantar ke saluran keputusan. Akhirnya, keputusan diagregatkan dengan merentasi saluran hasil dan hasil pemprosesan setiap tugas adalah output.

Ringkasan:
Saluran di Golang menyediakan cara yang ringkas dan berkesan untuk melaksanakan agihan tugas dan corak pengagregatan hasil. Melalui pengagihan tugas, tugasan dihantar ke coroutine kerja untuk pemprosesan serentak melalui pengagregatan hasil, hasil tugasan yang diselesaikan oleh coroutine kerja diagregatkan. Corak ini menjadikan pengaturcaraan serentak lebih mudah dan lebih cekap.

Menggunakan Saluran di Golang, kami boleh menggunakan sumber sistem dengan lebih baik dan meningkatkan kecekapan pemprosesan tugas. Dalam contoh kod, kami hanya menghantar tugasan ke saluran Dalam aplikasi sebenar, mungkin perlu untuk menimbal saluran, menggunakan saluran penimbal, dsb. untuk mengoptimumkan lagi proses pengagihan tugas dan pengagregatan hasil.

Melalui pengenalan dan contoh kod artikel ini, saya percaya pembaca boleh memahami cara menggunakan Saluran untuk mencapai pengagihan tugas dan pengagregatan hasil, supaya dapat menggunakan teknologi pengaturcaraan serentak dengan lebih baik.

Atas ialah kandungan terperinci Golang menggunakan Saluran untuk melaksanakan pengagihan tugas dan pengagregatan hasil. 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