coroutine goroutine

1 Ejemplo simple de goroutine

Fuente de: https://blog.csdn.net/u011957758/article/details/81159481

Los canales se dividen en 4 tipos

  • Canal sin búfer

Nota: La operación de envío en el canal sin búfer se bloqueará hasta que otra goroutine ejecute la operación de recepción en el canal correspondiente, momento en el que se completa la transferencia de valor y ambas gorutinas continúan ejecutándose.
Código descripción
paquete main
import (
"fmt"
// "tiempo"
)
var ch chan bool
func HelloWorld () { fmt.Println ("Hola mundo goroutine11") fmt.Println ("11111") fmt.Println ("2222") ch <- true // Pon un valor de tipo bool en la canalización } func main () { ch = make (chan bool) go HelloWorld () // Inicia una nueva operación concurrente <- ch // Hay en la canalización ch Lo leerá y luego ejecutará la siguiente oración. Si no hay contenido, siempre se bloqueará aquí y fmt.Println no se ejecutará más tarde ("Lo mostraré más tarde") }










Nota: Esto evita usar la suspensión para esperar, porque después de que se ejecute la rutina principal, otros también entenderán que las salidas de la rutina pueden no ver los resultados de impresión obtenidos, la administración y la solución razonable a este problema, como sin búfer pasillo

El resultado de la impresión es
Inserte la descripción de la imagen aquí

  • tubería

Inserte la descripción de la imagen aquí
Mire otro
paquete de ejemplo main
import (
"fmt"
"tiempo"
)
var echo chan string
var receive chan string
// define goroutine 1
func Echo () { time.Sleep (1 * time.Second) echo <- "oveja color café "Camel" } // Definir goroutine 2 func Receive () { temp: = <- echo // Bloquear el retorno del canal esperando eco recibir <- temp } func main () { echo = make (chan string) receive = make (chan string) go Echo () go Receive () getStr: = <-receive // ​​Recibe el retorno de goroutine 2 fmt.Println (getStr) }















Devolver resultado
Inserte la descripción de la imagen aquí

Nota: esta es una canalización

  • Tipo de canal unidireccional

package main
import (
"fmt"
"time"
)
// define goroutine 1
func Echo (out chan <- string) {// define el tipo de canal de salida
time.Sleep (1 * time.Second)
out <- "alpaca color café ”
Close (out)
}
// define goroutine 2
func Receive (out chan <- string, in <-chan string) {// define el tipo de canal de salida y el tipo de entrada
temp: = <-in // bloquea el canal esperando eco Regresar
<- temp
close (out)
}
func main () { echo: = make (chan string) receive: = make (chan string)

go Echo(echo)
go Receive(receive, echo)

getStr := <-receive   // 接收goroutine 2的返回

fmt.Println(getStr)

}

  • Tubería de amortiguación

Supongo que te gusta

Origin blog.csdn.net/weixin_37509194/article/details/109290677
Recomendado
Clasificación