Procesamiento paralelo en Golang: aprovechar la concurrencia para el rendimiento
Considere el código proporcionado, que muestra el procesamiento paralelo con gorutinas. Sin embargo, plantea dudas sobre el potencial de ejecución simultánea y el enfoque óptimo para lograr el paralelismo.
Ejecución concurrente de dowork
La premisa de que dowork se ejecutará en paralelo es no garantizado. Si bien las gorutinas proporcionan un mecanismo de concurrencia liviano, el programador del sistema operativo determina la secuencia de ejecución real. GOMAXPROCS, según las notas de la versión de Go 1.5, normalmente se alinea con los núcleos disponibles.
Enfoque sugerido: prevención de interbloqueos y control de concurrencia
Con respecto al mantenimiento de la ejecución de la función principal , fmt.Scanln puede no ser confiable, especialmente en entornos de producción. En su lugar, considere implementar un sync.WaitGroup para garantizar que todas las rutinas se completen antes de salir. Además, para mejorar el control de la concurrencia y garantizar la utilización adecuada de los recursos para tareas paralelas, se recomienda utilizar canales de trabajo dowork separados para cada rutina.
Función de utilidad para la ejecución de funciones paralelas
Para simplificar la ejecución de funciones paralelas, se puede aprovechar una función de utilidad existente como la siguiente:
import "sync"
// Parallelize parallelizes function calls
func Parallelize(functions ...func()) {
var waitGroup sync.WaitGroup
waitGroup.Add(len(functions))
defer waitGroup.Wait()
for _, function := range functions {
go func(f func()) {
defer waitGroup.Done()
f()
}(function)
}
}
Aplicando esta función al fragmento de código:
func1 := func() { f(0) }
func2 := func() { f(1) }
func3 := func() { f(2) }
Parallelize(func1, func2, func3)
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