Maison  >  Article  >  développement back-end  >  requêtes simultanées Golang

requêtes simultanées Golang

王林
王林original
2023-05-21 14:29:38685parcourir

À l'ère d'Internet d'aujourd'hui, demander et traiter des données rapidement et efficacement est une compétence essentielle pour tous les développeurs de programmes. Les demandes simultanées sont l’un des moyens efficaces d’atteindre cet objectif. Cet article expliquera comment implémenter des requêtes simultanées dans Golang.

1. Qu'est-ce qu'une demande simultanée

La demande simultanée fait référence à l'envoi de demandes à plusieurs serveurs en même temps pour accélérer la demande et le traitement des données et réduire le temps de réponse. Ceci est très utile dans les tâches où il y a une grande quantité de données à traiter, comme l'exploration, le traitement du Big Data, etc.

2. Comment implémenter des requêtes simultanées dans Golang

Les requêtes simultanées sont implémentées dans Golang via des coroutines et des pipelines. Les coroutines sont des threads légers dans Golang. Elles peuvent exécuter plusieurs coroutines dans un seul thread en même temps pour obtenir la concurrence. Les tuyaux sont un moyen de communication entre les coroutines, utilisé pour transférer des données et contrôler le flux d'exécution.

1. Utiliser goroutine

En golang, nous pouvons utiliser goroutine pour gérer les requêtes simultanées. Regardons un exemple simple :

package main

import (
    "fmt"
    "net/http"
)

func main() {
    websites := []string{
        "https://www.baidu.com",
        "https://www.google.com",
        "https://www.bing.com",
    }

    for _, url := range websites {
        go func(u string) {
            resp, err := http.Get(u)
            if err != nil {
                fmt.Println(u, "is not available")
            } else {
                fmt.Println(u, "status is", resp.Status)
            }
        }(url)
    }
}

Dans ce code, nous définissons une tranche contenant trois adresses de sites Web, puis utilisons une boucle for pour parcourir la tranche et utilisons le mot-clé go dans le corps de la boucle pour démarrer une coroutine Each. est chargé de demander le contenu d’un site Web. S'il y a une erreur dans la demande, nous afficherons un message d'erreur ; si la demande réussit, nous afficherons un code d'état.

Dans cet exemple, parce que nous utilisons goroutine, les trois requêtes sont effectuées en même temps et ne se bloqueront pas. Cela améliore considérablement l'efficacité d'exécution du programme.

2. Utiliser le canal

En golang, nous pouvons utiliser le canal pour résoudre le problème de communication entre les goroutines. Dans les requêtes simultanées, nous pouvons utiliser des canaux pour transmettre des données et contrôler le flux d'exécution.

Prenons un exemple spécifique :

package main

import (
    "fmt"
    "net/http"
)

func main() {
    websites := []string{
        "https://www.baidu.com",
        "https://www.google.com",
        "https://www.bing.com",
    }

    ch := make(chan string)

    for _, url := range websites {
        go func(u string) {
            resp, err := http.Get(u)
            if err != nil {
                ch <- fmt.Sprintf("%s is not available", u)
            } else {
                ch <- fmt.Sprintf("%s status is %s", u, resp.Status)
            }
        }(url)
    }

    for i := 0; i < len(websites); i++ {
        fmt.Println(<-ch)
    }
}

Dans cet exemple, nous définissons un canal pour fournir les résultats de chaque requête de site Web. Dans la goroutine, si la requête réussit, le résultat est envoyé au canal ; si la requête échoue, un message d'erreur est envoyé. Ensuite, utilisez une boucle for dans la coroutine principale pour attendre le retour de tous les résultats. Ici, l'opération de lecture bloquante du canal est utilisée

En utilisant des canaux, nous pouvons garantir que les résultats de chaque requête sont affichés dans l'ordre dans lequel ils sont envoyés, sans bloquer l'exécution d'autres requêtes.

3. Résumé

Il est très simple d'implémenter des requêtes simultanées dans Golang. Il vous suffit d'utiliser goroutine et Channel. Grâce à ces deux fonctions, nous pouvons envoyer plusieurs requêtes en même temps, améliorant ainsi les performances et l'efficacité du programme.

Mais il y a aussi quelques problèmes avec les requêtes concurrentes, comme par exemple exercer une pression excessive sur le serveur. Lors de l'utilisation de requêtes simultanées, nous devons exercer un contrôle raisonnable en fonction de la situation spécifique pour éviter de surcharger le serveur.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Article précédent:encapsulation d'erreur GolangArticle suivant:encapsulation d'erreur Golang