"Si un trabajador quiere hacer bien su trabajo, primero debe afilar sus herramientas." - Confucio, "Las Analectas de Confucio. Lu Linggong"
Página delantera > Programación > ¿Cómo limitar la ejecución concurrente de gorutinas en Go?

¿Cómo limitar la ejecución concurrente de gorutinas en Go?

Publicado el 2024-11-10
Navegar:565

How to Limit Concurrent Goroutine Execution in Go?

Limitar la ejecución simultánea de gorutinas

Considere un escenario en el que tiene una lista de URL para procesar y desea limitar el número de gorutinas simultáneas en ejecución. . Por ejemplo, si tiene 30 URL, es posible que solo desee que 10 gorutinas funcionen en paralelo.

El código proporcionado intenta utilizar un canal almacenado en búfer de tamaño paralelo para limitar la cantidad de gorutinas que se ejecutan . Sin embargo, este enfoque no parece bloquearse después de procesar todas las URL. Una forma más efectiva de lograr esta limitación de simultaneidad es crear una cantidad específica de rutinas de trabajo y alimentarlas con URL a través de un canal dedicado.

Aquí hay una versión mejorada del código:

parallel := flag.Int("parallel", 10, "max parallel requests allowed")
flag.Parse()
urls := flag.Args()

// Create a channel to hold URLs that workers will consume
workerURLChan := make(chan string)

// Start a goroutine to feed URLs to the workers
go func() {
    for _, u := range flag.Args() {
        workerURLChan 

En este código actualizado, creamos una rutina de trabajo para cada ejecución simultánea permitida, y estos trabajadores obtienen las URL del canal dedicado. Una vez que se han distribuido todas las URL, se cierra el trabajadorURLChan, lo que hace que los trabajadores salgan cuando se completa su URL actual. Este mecanismo limita efectivamente la cantidad de gorutinas simultáneas en ejecución.

Último tutorial Más>

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