Heim  >  Artikel  >  Backend-Entwicklung  >  Blockiert Golang nicht?

Blockiert Golang nicht?

(*-*)浩
(*-*)浩Original
2019-12-17 11:01:435238Durchsuche

Blockiert Golang nicht?

select ist ein häufig verwendetes Schlüsselwort in der Go-Sprache. Es wird verwendet, um E/A-Vorgänge im Zusammenhang mit Kanälen zu überwachen.

Wenn mehrere Fälle ausgeführt werden können, wählt Select zufällig und fair einen zur Ausführung aus. Andere werden nicht hingerichtet.                  (Lernempfehlung: go)

Ansonsten:

Wenn eine Standardklausel vorhanden ist, wird die Anweisung ausgeführt.

Ohne die Standardklausel wird „select“ blockiert, bis eine Kommunikation ausgeführt werden kann; Go bewertet den Kanal oder Wert nicht erneut.

Grundlegende Verwendung

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

Wenn ein oder mehrere E/A-Vorgänge abgeschlossen werden können, wählt das Go-Laufzeitsystem zufällig einen zur Ausführung aus, andernfalls, Falls vorhanden Wenn es keine Standardverzweigung gibt, wird die Select-Anweisung blockiert, bis mindestens eine E/A-Operation ausgeführt werden kann.

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...")
    }

Führen Sie den obigen Code aus ist immer noch weniger als 3 Sekunden. Daher wird das aktuelle Programm standardmäßig ausgeführt.

Das obige ist der detaillierte Inhalt vonBlockiert Golang nicht?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
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
Vorheriger Artikel:Golang Rune ein paar BytesNächster Artikel:Golang Rune ein paar Bytes