en las versiones GO antes de 1.5, se observó una pieza de código que involucra tiempo de ejecución.gosched () para afectar la salida de un programa:
Say (s Stryc) para i: = 0; i func say(s string) { for i := 0; i salida con runtime.gosched ():hola mundo Hola mundo Hola mundo Hola mundo hola
func say(s string) { for i := 0; i salida sin runtime.gosched ():hello Hola Hola Hola hola
func say(s string) { for i := 0; i explicaciónen versiones GO antes de 1.5, runtime.gosched () arrojó explícitamente el control a otras goroutinas cuando se les llamó. Mientras que los programas GO se ejecutan en un solo hilo del sistema operativo por defecto, RunTime.Gosched () permitió al programador cambiar la ejecución entre Goroutinas.
cuando GomaxProcs no fue inicio o configurado en 1, la multitarea cooperativa de GO requería Goroutines para obtener un control de rendimiento explícito. Por lo tanto, en el ejemplo de código anterior, se llamó la salida "Mundo" solo apareció cuando RunTime.Gosched () se llamó, ya que permitió al programador cambiar a la Goroutine ejecutando la instrucción de impresión "Mundo".
gomaxprocs y la multitaina cooperativa
en 1.5 y más tarde, runtime.gomaxprocsprocs, lo que significa que se establece por el momento de que se establece de manera predeterminada de hardware de hardware, lo que significa que se establece por el momento, lo que se establece de manera predeterminada, lo que significa que se establece por el momento, lo que se establece por el momento, lo que significa que se establece por defecto, lo que se establece por defecto. Go puede crear múltiples hilos de SO para ejecutar Goroutinas.
con gomaxprocs establecido en un valor mayor que 1, las goroutinas pueden ejecutarse en paralelo. Sin embargo, a diferencia de los sistemas de multitarea preventiva, las goroutinas aún deben producir un control explícitamente para permitir que otras goroutinas se ejecuten. Esto se debe a que Go usa multitarea cooperativa, donde las goroutinas entregan voluntariamente el control al planificador.
implicaciones para el paralelismo
con gomaxprocs establecido en un valor mayor que 1, el resultado de las goroutinas entrelazadas puede convertirse en indeterminista, ya que el programador puede cambiar la extensión entre ellos en cualquier momento. Esto puede conducir a patrones de salida impredecibles, como se ve en el ejemplo anterior cuando GomaxProcs se estableció en 2.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3