goroutine idioma ir

goroutine idioma ir

Quiere en otros idiomas múltiples tareas en un programa, como por ejemplo, pitón multi-tarea puede utilizar de múltiples procesos, multi-hilo, Ctrip. Pero más proceso que consume muchos recursos, multi-hilo de núcleo múltiple no se puede aplicar la ventaja (GIL), corrutina pitón es de un solo subproceso, debe hacer concesiones como una tarea, otra de las tareas a realizar, si una tarea bloqueo en vivo, que nadie CPU Vamos, pues todo el programa se bloqueará en vivo.

goroutine (corrutinas) ir lenguaje es un concepto similar al hilo, pero es más que un hilo de peso ligero. Al habilitar una pluralidad goroutine, cada programa goroutine asignado a cada una de las CPU de la base, podemos dar plena eficacia de múltiples núcleos CPU juego. ir ratio de eficiencia corrutina m (CPU Auditoría) / n (número goroutine), mientras que la eficiencia de la relación de pitón corrutina de 1 / n

goroutine abierto

Sólo necesitan ser envasados en una función de tareas, vaya utilizar palabras clave, puede abrir una goroutinemultitarea completa. Mientras tanto, la función principal de este programa es unagoroutine

package main

import "fmt"

func work() {
	fmt.Printf("work goroutine")
}

func main() {
	go work()
	fmt.Println("main goroutine")
}

sync.WaitGroup

El programa se inicia goroutine anterior es ningún problema, pero después de ejecutar el compilador sólo encontrará impresa main goroutine. Esto se debe a que, después de comenzar a abrir otra goroutine en el principal dentro goroutine, el otro goroutine abierto no tuvo tiempo de ejecución, el goroutine principal ha terminado, al final de la goroutine principal, abierto en el principal goroutine goroutine terminará todo, pienso en todos los goroutine principal para llevar a cabo otra goroutine, usted tiene que esperar.

package main

import (
	"fmt"
	"time"
)

func work() {
	fmt.Println("work")
}

func main() {
	go work()
	fmt.Println("main goroutine")
	time.Sleep(time.Second)
}

Uso time.sleep a dormir es un programa para dejar que el otro goroutine lograr un tiempo suficiente para funcionar
, pero cuando se abre más goroutine, no sabemos toda la corrutina tiene en marcha terminado, la cantidad de tiempo que no podemos estimar el tiempo de sueño. tiempo de sueño puede ser más, quizá menos, menos hará que usted quiere ser capaz de alcanzar el objetivo, el programa permitirá que más y más horas de sueño, un desperdicio de recursos, en este momento, es necesario introducir la herramienta de sincronización para resolver este módulo problema

package main

import (
	"fmt"
	"sync"
)

var wg sync.WaitGroup

func work() {
	defer wg.Done()
	fmt.Println("work")

}

func main() {
	wg.Add(1)
	go work()
	fmt.Println("main goroutine")
	wg.Wait() // 等待所有的协程能全部运行完毕
}

El uso sync.WaitGroup, la necesidad actual para abrir una co-rutina, al WaitGroupque se añadió 1, después de la co-rutina a WaitGroupinformar se ha completado (puede ser aplazar mezclado Off palabras cortantes utilizados), y finalmente la última goroutine primarios utilizados (función principal) WaitGroupque esperar a que todos final goroutine de ejecución (correspondiente al final de ejecución de funciones)

las relaciones goroutine e hilos

Hilo aquí se refiere al sistema operativo hilos, hilos y goroutine empezando recursos ocupados no son lo mismo, la memoria de pila del subproceso es generalmente de 2 MB, pero goroutine al principio de la ocupación de la memoria de pila es de 2 kb, pila goroutine no es fijo, expansión puede ir como rodajas, como, hasta un límite máximo de G, todo puede abrirse fácilmente en cien mil goroutine dentro de marcha.

  • la programación de GMP
    • G: representantes goroutine G, y la información de unión almacenado en el interior del goroutine actual P contenían información tal como goroutine actual
    • M: M es salir a correr hilos de sistema operativo virtual. con el tiempo se necesita un goroutine para ejecutarse en M
    • P: P goroutine gestores de colas de un sistema, P, que mantiene el actual contexto de goroutine, P será goroutine gestión actual de la cola para hacer algo de programación (goroutine puede tomar algún tiempo de CPU es demasiado largo, P goroutine esto va a hacer una pausa y, a continuación, dejar que otra goroutine para llevar a cabo). Cuando su goroutine correr por todas partes, el P pondrá en cola para entrar a tomar un mundial, en general, si no lo hay, se irá a otra P siquiera entrar a tomar goroutine, esto se puede lograr a maximizar la eficiencia de
    • P y M son generalmente uno a uno. Su relación es: P gestiona un grupo G de montaje para ejecutarse en M. Cuando un bloque largo en un G M, tiempo de ejecución crea un nuevo M, P será el bloqueo de G G donde otra montar el nuevo M. Cuando el viejo G o bloqueo completo que ha recuperado su antiguo M. troquel

Supongo que te gusta

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