So verwenden Sie Goroutine, um parallele Anforderungen in der Go-Sprache zu implementieren

PHPz
Freigeben: 2023-04-06 10:51:51
Original
762 Leute haben es durchsucht

golang ist eine sehr beliebte Programmiersprache. Sie verfügt über viele einzigartige Funktionen. Eine der wichtigen Funktionen ist, dass sie die Parallelverarbeitung unterstützt. In der heutigen Welt sind Netzwerkanfragen zu einem Teil unseres täglichen Lebens geworden. Wenn wir mehrere APIs anfordern müssen, wie können wir diese Aufgabe in kürzester Zeit erledigen? Genau darum geht es beim Thema Golang Parallel Requests.

Die sogenannte parallele Anfrage bedeutet einfach, dass mehrere Netzwerkanfragen gleichzeitig initiiert werden, um die Effizienz der Anfrage zu verbessern. In Golang können wir Goroutine verwenden, um parallele Anforderungen zu implementieren und eine große Anzahl von Anforderungen schnell zu bearbeiten.

Schauen wir uns zunächst an, wie man mit Goroutine parallele Anfragen implementiert.

package main

import (
    "fmt"
    "net/http"
)

func main() {
    urls := []string{
        "http://example.com/1",
        "http://example.com/2",
        "http://example.com/3",
    }

    for _, url := range urls {
        go func(url string) {
            res, err := http.Get(url)
            if err != nil {
                fmt.Println("Error:", err)
                return
            }

            fmt.Println("Response:", res.Status)
        }(url)
    }

    fmt.Scanln()
}
Nach dem Login kopieren

In diesem Beispiel definieren wir ein Array von URLs, das die URLs enthält, die wir anfordern müssen. Wir durchlaufen dieses Array und starten für jede URL eine neue Goroutine mit dem Schlüsselwort go. Diese Goroutine sendet eine HTTP-GET-Anfrage und gibt die Antwort nach Abschluss der Anfrage an das Terminal aus. go 关键字在每个 URL 上启动一个新的 goroutine。这个 goroutine 发送一个 HTTP GET 请求,并在请求结束后将响应结果输出到终端。

这样的同时请求会让我们的程序变得更快,但同时也会有一些问题。首先,如果我们启动了太多的 goroutine,我们可能会超过操作系统允许的最大并发数。其次,我们需要等待所有请求完成才能得到结果,这可能会导致响应时间过长,也就是说我们需要一些更加高效的处理方式。

接下来,我们来看一下如何使用 goroutine 和 channel 实现更加高效的并行请求。

package main

import (
    "fmt"
    "net/http"
)

func main() {
    urls := []string{
        "http://example.com/1",
        "http://example.com/2",
        "http://example.com/3",
    }

    ch := make(chan string)

    for _, url := range urls {
        go func(url string) {
            res, err := http.Get(url)
            if err != nil {
                fmt.Println("Error:", err)
                return
            }

            ch <- fmt.Sprintf("Response from %s: %s", url, res.Status)
        }(url)
    }

    for i := 0; i < len(urls); i++ {
        fmt.Println(<-ch)
    }
}
Nach dem Login kopieren

在这个例子中,我们定义了一个名为 ch

Solche gleichzeitigen Anfragen werden unser Programm schneller machen, gleichzeitig wird es aber auch einige Probleme geben. Erstens: Wenn wir zu viele Goroutinen starten, überschreiten wir möglicherweise die vom Betriebssystem maximal zulässige Parallelität. Zweitens müssen wir warten, bis alle Anfragen abgeschlossen sind, bevor wir die Ergebnisse erhalten, was zu langen Antwortzeiten führen kann, was bedeutet, dass wir effizientere Verarbeitungsmethoden benötigen.

Als nächstes werfen wir einen Blick darauf, wie man Goroutine und Channel verwendet, um effizientere parallele Anfragen zu erreichen.

rrreee

In diesem Beispiel definieren wir einen Kanal mit dem Namen ch und senden die Ergebnisse an den Kanal in jeder Goroutine. Im Hauptthread verwenden wir eine Schleife, um alle Ergebnisse im Kanal zu empfangen und sie auf dem Terminal auszugeben. 🎜🎜Der Vorteil der Verwendung von Kanälen besteht darin, dass wir die Anzahl der Goroutinen steuern können und nicht warten müssen, bis alle Goroutinen die Anfrage abgeschlossen haben, um das Ergebnis zu erhalten. Im Vergleich zum Warten auf den Abschluss aller Anfragen können wir mit solchen parallelen Anfragen schneller Ergebnisse erzielen und Verzögerungen vermeiden, die durch lange Antwortzeiten auf Anfragen verursacht werden. 🎜🎜Zusammenfassend ist die Golang-Parallelanfrage eine Methode, die die Funktionen der Golang-Sprache nutzt, um mehrere Netzwerkanfragen gleichzeitig zu verarbeiten und so die Anfrageeffizienz zu verbessern. Bei der Implementierung paralleler Anforderungen können wir Goroutine und Channel verwenden, um die Parallelität des Programms zu steuern und die Ergebnisse unmittelbar nach Erhalt der Antwort auf jede Anforderung zurückzugeben, sodass wir eine große Anzahl von Anforderungen in kürzester Zeit verarbeiten können. 🎜

Das obige ist der detaillierte Inhalt vonSo verwenden Sie Goroutine, um parallele Anforderungen in der Go-Sprache zu implementieren. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Quelle:php.cn
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!