Rumah >pembangunan bahagian belakang >Golang >Cara Golang berfungsi dengan cekap mengendalikan tugas selari

Cara Golang berfungsi dengan cekap mengendalikan tugas selari

王林
王林asal
2024-04-19 10:36:011043semak imbas

Pengendalian tugas selari yang cekap dalam fungsi Go: Gunakan kata kunci go untuk melancarkan rutin serentak. Gunakan sync.WaitGroup untuk mengira bilangan rutin yang belum selesai. Apabila rutin selesai, wg.Done() dipanggil untuk mengurangkan kaunter. Program utama menyekat menggunakan wg.Wait() sehingga semua rutin selesai. Kes praktikal: Hantar permintaan web secara serentak dan kumpulkan respons.

Golang 函数如何高效处理并行任务

Pemprosesan tugas selari yang cekap dalam fungsi Go

Bahasa Go menyediakan keupayaan pemprosesan selari yang berkuasa, membolehkan pembangun mencipta dan melaksanakan tugas serentak dengan mudah. Artikel ini akan membincangkan cara menggunakan fungsi Go untuk mengendalikan tugas selari dengan cekap dan menyediakan kes praktikal untuk menunjukkan penggunaannya.

Fungsi Concurrency dalam Go

Fungsi Go menyediakan dua kata kunci untuk menyokong pelaksanaan serentak: go dan sync.WaitGroup. Kata kunci go digunakan untuk memulakan rutin Go serentak, manakala sync.WaitGroup digunakan untuk menunggu semua rutin selesai. gosync.WaitGroupgo 关键字用于启动并发的 Go 例程,而 sync.WaitGroup 用于等待所有例程完成。

等待组

sync.WaitGroup 是一个计数器,用于跟踪未完成例程的数量。当例程完成时,它会调用 wg.Done() 来递减计数器。主程序可以使用 wg.Wait() 方法来阻塞,直到所有例程完成。

实战案例:并发 Web 请求

考虑一个场景,我们需要并发发送多个 Web 请求并收集响应。以下是演示如何使用 Go 函数进行高效并发任务处理的代码:

package main

import (
    "fmt"
    "net/http"
    "sync"
)

func main() {
    // 要发送的 Web 请求 URL
    urls := []string{"https://example.com", "https://example2.com", "https://example3.com"}

    // 创建等待组
    var wg sync.WaitGroup

    for _, url := range urls {
        // 启动一个并发例程来发送 Web 请求
        wg.Add(1)
        go func(url string) {
            // 发送 GET 请求
            resp, err := http.Get(url)
            if err != nil {
                fmt.Printf("Error getting %s: %v\n", url, err)
            } else {
                fmt.Printf("Status code for %s: %d\n", url, resp.StatusCode)
            }

            // 例程完成,递减等待组计数
            wg.Done()
        }(url)
    }

    // 等待所有例程完成
    wg.Wait()
}

在上面的代码中:

  • 我们使用 sync.WaitGroup 来跟踪未完成例程的数量。
  • 对于每个 Web 请求 URL,我们启动一个并发的 Go 例程来发送请求。
  • 例程使用 wg.Done() 来表示它已完成。
  • 主程序使用 wg.Wait()
Kumpulan Tunggu

🎜sync.WaitGroup ialah kaunter yang menjejaki bilangan rutin yang belum selesai. Apabila rutin selesai, ia memanggil wg.Done() untuk mengurangkan kaunter. Program utama boleh menggunakan kaedah wg.Wait() untuk menyekat sehingga semua rutin selesai. 🎜🎜🎜Kes Praktikal: Permintaan Web Serentak🎜🎜🎜Pertimbangkan senario di mana kita perlu menghantar berbilang permintaan web serentak dan mengumpulkan respons. Berikut ialah kod yang menunjukkan cara menggunakan fungsi Go untuk pemprosesan tugas serentak yang cekap: 🎜rrreee🎜 Dalam kod di atas: 🎜
  • Kami menggunakan sync.WaitGroup untuk menjejaki kuantiti rutin tertunggak. 🎜
  • Untuk setiap URL permintaan web, kami memulakan rutin Go serentak untuk menghantar permintaan. 🎜
  • Rutin menggunakan wg.Done() untuk menunjukkan bahawa ia telah selesai. 🎜
  • Atur cara utama menggunakan wg.Wait() untuk menyekat sehingga semua rutin selesai. 🎜🎜🎜Dengan menggunakan kaedah ini, kami boleh menghantar berbilang permintaan web secara serentak dan terus melaksanakan program utama tanpa menunggu respons setiap permintaan. 🎜

Atas ialah kandungan terperinci Cara Golang berfungsi dengan cekap mengendalikan tugas 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