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

Blockiert Golang nicht?

(*-*)浩
Freigeben: 2019-12-17 11:01:43
Original
5301 Leute haben es durchsucht

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处理流程
Nach dem Login kopieren

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...")
    }
Nach dem Login kopieren

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!

Verwandte Etiketten:
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