ir 的 canal

canal de idioma ir

ir a la lengua goroutine proporciona concurrencia, ir a la lengua también proporciona un canal para la comunicación entre los eventos simultáneos.
lenguajes de programación tradicionales a través de la comunicación de memoria compartida, cuando varios subprocesos al mismo tiempo que operan una variable compartida, con el fin de hacer que el programa de conseguir el objetivo pretendido, podrían ser una variable bloqueada, lo que haría que la espera simultánea de programas, causando programa local de serie. El concepto de diseño del canal es ir a través de la comunicación de memoria compartida. es un tipo especial de canal, que sigue el principio FIFO, para asegurar el orden del transceptor de datos. idioma ir goroutine puede comunicarse por el canal.

La declaración de Chan

import "fmt"

func main() {

	var chan1 chan int // 声明int类型的chan

	// chan是引用类型,必须舒适化后才能使用
	chan1 = make(chan int, 10)
	fmt.Println(chan1) // 0xc000082000
}

Una cosa declaración de Chan a la nota, que Chan debe ser utilizado con el fin de hacer uso de inicialización

operaciones chan

package main

import "fmt"

func main() {

	var chan1 chan int // 声明int类型的chan

	// chan是引用类型,必须舒适化后才能使用
	chan1 = make(chan int, 10)

	// 向chan中传入10
	chan1 <- 10

	// 从chan中取值
	x := <-chan1
	fmt.Println(x)

	// 关闭chan
	close(chan1)

}

Chan Si está utilizando también debe tener un búfer
cuando chan datos almacenados dentro de la memoria intermedia está llena, en otra goroutine quiere tener que esperar a que la transmisión de datos Chan Chan posición vacante, por lo que cuando el tiempo necesario para crear una razonable Chan el tampón que proporcione Chan

Y una pluralidad Chan goroutine de operación para el bucle Chan

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

var chan1 chan interface{}

func add_to_chan(c chan interface{}, i int) {
	c <- i
	wg.Done()
}

func main() {

	// 过个goroutine往chan里添加数据
	chan1 = make(chan interface{}, 200)
	for i := 1; i < 100; i++ {
		wg.Add(1)
		go add_to_chan(chan1, i)
	}

	wg.Wait()

	defer close(chan1)
	// chan的for循环
	for i := range chan1 {
		fmt.Println(i)
	}

}

Supongo que te gusta

Origin www.cnblogs.com/ivy-blogs/p/12659430.html
Recomendado
Clasificación