Maison  >  Article  >  développement back-end  >  Golang Select ne bloque-t-il pas ?

Golang Select ne bloque-t-il pas ?

(*-*)浩
(*-*)浩original
2019-12-17 11:01:435238parcourir

Golang Select ne bloque-t-il pas ?

select est un mot-clé couramment utilisé dans le langage Go. Il est utilisé pour surveiller les opérations IO liées aux canaux. Lorsque des opérations IO se produisent, les actions correspondantes sont déclenchées.

S'il existe plusieurs cas pouvant être exécutés, Select en sélectionnera un de manière aléatoire et équitable pour l'exécution. D'autres ne seront pas exécutés.                  (Apprentissage recommandé : go)

Sinon :

S'il y a une clause par défaut, l'instruction est exécutée.

Sans la clause par défaut, select bloquera jusqu'à ce qu'une communication puisse s'exécuter ; Go ne réévaluera pas le canal ou la valeur.

Utilisation de base

//select基本用法
select {
case <- chan1:
// 如果chan1成功读到数据,则进行该case处理语句
case chan2 <- 1:
// 如果成功向chan2写入数据,则进行该case处理语句
default:
// 如果上面都没有成功,则进入default处理流程

Si une ou plusieurs opérations d'E/S peuvent être effectuées, le système d'exécution Go en sélectionnera une au hasard pour l'exécution, sinon, s'il y a une branche par défaut, l'instruction de branche par défaut est exécutée. S'il n'y a pas de valeur par défaut, l'instruction select se bloquera jusqu'à ce qu'au moins une opération IO puisse être effectuée

start := time.Now()
    c := make(chan interface{})
    ch1 := make(chan int)
        ch2 := make(chan int)

    go func() {

        time.Sleep(4*time.Second)
        close(c)
    }()

    go func() {

        time.Sleep(3*time.Second)
        ch1 <- 3
    }()

      go func() {

        time.Sleep(3*time.Second)
        ch2 <- 5
    }()

    fmt.Println("Blocking on read...")
    select {
    case <- c:

        fmt.Printf("Unblocked %v later.\n", time.Since(start))

    case <- ch1:

        fmt.Printf("ch1 case...")
      case <- ch2:

        fmt.Printf("ch1 case...")
    default:

        fmt.Printf("default go...")
    }

Exécutez le code ci-dessus depuis l'heure actuelle. est toujours inférieur à 3 secondes. Par conséquent, le programme actuel s'exécutera par défaut.

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:golang rune quelques octetsArticle suivant:golang rune quelques octets