Grow with AppMaster Grow with AppMaster.
Become our partner arrow ico

Goroutines

Goroutines

Uno de los aspectos más populares del lenguaje de programación Go es su soporte de primera clase para la capacidad de un ordenador de realizar muchas tareas simultáneamente. La capacidad de ejecutar código de forma simultánea es cada vez más importante en la programación, ya que los ordenadores pasan de ejecutar un único flujo de código de forma más rápida a ejecutar muchos flujos de forma simultánea. Para hacer que los programas se ejecuten más rápido, los programadores deben diseñarlos para que se ejecuten simultáneamente, de modo que cada elemento concurrente del sistema pueda ejecutarse independientemente de los demás.

Dos funcionalidades de Go, Goroutines, y los canales, facilitan la concurrencia cuando se emplean conjuntamente. Goroutines ofrecen el tipo primario básico para esta capacidad. Goroutines son menos costosos en cuanto a espacio de memoria, interacción entre hilos y conectividad de red. También tienen un mejor tiempo de inicio que los hilos, que muchos lenguajes de programación soportan. En esencia, Go se refiere a Goroutines como lo que Java y otros lenguajes de programación denominan hilos.

¿Qué es Goroutines?

Una goroutine es un hilo de implementación simple en el Golang que se ejecuta simultáneamente con el resto del programa. Goroutines son asequibles al parecerse a los hilos estándar ya que el coste de crear una goroutine es extremadamente bajo. Por lo tanto, se emplean ampliamente en Go para la programación concurrente. Cada programa consiste en al menos una única goroutina conocida como goroutina principal. La goroutina principal controla todas las demás goroutinas; por lo tanto, si la goroutina principal termina, todas las demás goroutinas del script también lo hacen. La goroutina siempre está activa en segundo plano.

Ejemplo: Aquí hay una ilustración: estás escribiendo algo en tu cuaderno y te da hambre; te tomarás un descanso y comerás algo. A continuación, empieza a escribir de nuevo. Ahora estás haciendo dos funciones (escribir y comer) por una ventana de tiempo que se considera empleo concurrente. Cabe destacar que estas dos tareas (escribir y comer) aún deben completarse de forma concurrente. Cuando los elementos se completan simultáneamente, se denomina paralelismo (imagina que utilizas tu teléfono móvil mientras comes patatas fritas). La concurrencia incluye la interacción con muchas cosas simultáneamente. El paralelismo (realizar muchas cosas simultáneamente) es una subclase de esto (no tiene que realizarse al mismo tiempo) con algún horario.

Podemos añadir una goroutine aplicando la palabra clave go a la llamada de la función. Una vez que apliquemos la palabra clave go a la llamada a la función, estableceremos la concurrencia al rendimiento. Pero primero, identifiquemos el efecto de aplicar la palabra clave go a la ejecución. Consideremos que hay dos goroutines en un programa. El texto "package main import" será la entrada del programa. En Go, una importación del paquete main es una declaración de importación. La goroutine principal (first goroutine) está implícita. Cuando ejecutamos go (f), se forma la segunda goroutina (0). Normalmente, nuestro software ejecutará todos los comandos de la función principal cuando ejecutamos una función antes de pasar a la siguiente línea.

Podemos ejecutar el procedimiento rápidamente con una goroutine antes de pasar al siguiente paso. Como resultado, se ha añadido un método scanln; de lo contrario, el código terminaría antes de mostrar todos los números. Goroutines es sencillo de crear y puede hacerse en grandes cantidades. Notará que cuando se ejecuta este software, las goroutines parecen operar secuencialmente en lugar de concurrentemente.

Try AppMaster no-code today!
Platform can build any web, mobile or backend application 10x faster and 3x cheaper
Start Free

normal vs goroutine

Ventajas de Goroutines sobre los hilos

Goroutines cuestan poco

Goroutines son menos costosas que otros procesos. El tamaño de la masa es de sólo unos pocos kilobytes, y puede expandirse o contraerse para satisfacer las demandas del programa, a diferencia de los hilos, cuyo tamaño de la pila debe ser definido y es permanente.

Hay multiplexados Goroutines

Hay muy pocos hilos del sistema operativo a los que están multiplexados. En un programa con cientos de goroutines, puede haber sólo un proceso. El resto de las goroutinas se transfieren al nuevo proceso del sistema operativo. Supongamos que alguna goroutina de ese proceso se atasca, por ejemplo, cuando busca la intervención del usuario. El tiempo de ejecución gestiona cada una de ellas, y a los desarrolladores se nos da una API clara para gestionarlas simultáneamente y estar aislados de estos sutiles entresijos.

Goroutines comunicarse mediante canales

Goroutines conversar utilizando canales. Su objetivo es evitar que se produzcan situaciones de carrera cuando comparten la memoria pertinente. Los canales pueden compararse con un conducto que las goroutines utilizan para interactuar.

¿Qué son los canales?

Dos goroutines pueden interactuar entre sí y coordinar su funcionamiento a través de canales. Este software imprimirá continuamente "ping". Para designar una forma de canal, el prefijo "chan" va acompañado de los elementos transmitidos en el canal". En este caso, se trata de cadenas de caracteres. En el canal, los mensajes se envían y reciben utilizando el operador. "ping" se refiere al envío de un "ping".

El canal se utiliza para mantener sincronizadas las dos goroutines. Antes de intentar enviar un mensaje a través del canal, el enrutador esperará hasta que la impresora esté lista para aceptarlo. El término para esto es inhibición. Cuando se crea un canal, se puede utilizar un segundo parámetro para la función make: c:= make (chan int, 1)

La dirección del canal

Podemos definir la orientación de una forma de canal y parametrizarla para recibir o transmitir. El signo del método Pinger, por ejemplo, puede ser alterado así

func pinger(c chan<- string)

C sólo puede ser enviado ahora. Recibir de c resultará en un error de código. Del mismo modo, podemos modificar la salida a:

func printer(c string -chan)

Un semicanal no tiene estas restricciones. Un canal bidireccional puede ser suministrado a un procedimiento que sólo acepta canales de sólo transmisión o de sólo aceptación, pero no al revés.

Go-channels

¿Cómo hacer una Goroutine?

El método para lanzar una goroutine es sencillo. Aplique la palabra clave "go" a la llamada de la función para hacer una goroutina que se ejecutará concurrentemente. Aquí vamos a hacer una goroutina. Supongamos que tenemos un programa que contiene dos funciones: una es una función de bienvenida y la otra es la función principal.

Cuando creamos una nueva goroutina, el código de bienvenida () se ejecutará junto a la función principal(). Cuando ejecutes este programa, te sorprenderás. Este programa sólo muestra el texto de la operación principal. ¿Qué ocurrió con la primera goroutina o nueva goroutina que iniciamos? Para comprender por qué ocurre esto, primero debemos conocer las dos características principales de las goroutinas.

Try AppMaster no-code today!
Platform can build any web, mobile or backend application 10x faster and 3x cheaper
Start Free
  • La función goroutine responde instantáneamente cuando creamos una nueva goroutine. Aparte de las funciones, la gestión no depende de la goroutina, por lo que no espera a que ésta termine su ejecución. La ejecución se entrega al siguiente bloque de código después de la función goroutine. Por ello, no se tienen en cuenta los parámetros dados por la goroutina.
  • Cualquier goroutina adicional debe ejecutarse simultáneamente con la goroutina principal. Si la goroutina principal falla, el programa saldrá, y no se ejecutará ninguna goroutina adicional.

Ahora entiendes por qué nuestro código no funcionó. Después de la llamada a go welcome(), el control fue transferido a la siguiente línea de código antes de esperar a que la goroutina hello terminara, y la función main saliera. La goroutina principal moría porque no había ningún script que realizar, impidiendo que la goroutina hello se ejecutara.

Invocamos la técnica sleep (time.sleep(1 * time.second)) para pausar la goroutina durante 1 segundo. La función de bienvenida () ahora tiene suficiente tiempo para completar antes de que la goroutina principal salga. Este software escribe inicialmente el "welcome goroutine" y luego espera un segundo antes de imprimir la función principal. Usamos la técnica del sleep en la goroutina principal para pausarla por un momento y dejar que las otras goroutinas se completen.

Creando múltiples Goroutines

Vamos a iniciar otro programa para crear múltiples goroutines. Podemos empezar creando dos goroutines que se ejecutarán en paralelo. Estas dos goroutines son la goroutine números [go numbers()] y la goroutine alfabeto [go alphabets ()].

La goroutina de números permanece durante 250 ms antes de imprimir 1, descansa de nuevo antes de imprimir 2, y así sucesivamente hasta producir 5. Del mismo modo, la goroutina alfanumérica muestra la letra de la a a la e y luego espera 400 milisegundos. Finalmente, la goroutina principal crea los enteros y los caracteres alfanuméricos y hace una pausa para un golpe, y luego la goroutina principal termina.

Errores frecuentes en la programación concurrente

  • Ausencia de sincronizaciones cuando éstas son necesarias
  • Utilizar el tiempo. Sleep para hacer sincronizaciones
  • Dejar goroutines colgando valores de copia de los tipos del paquete estándar de sincronización
  • Llamar al sync
  • Waitgroup
  • Añadir el método en lugares equivocados
  • Usar canales como canales de cierre de mañana, no de la última goroutine funcional del emisor

Conclusión

En este artículo, desarrollamos un programa que utilizaba la palabra clave go para lanzar una goroutina y múltiples goroutinas que imprimían simultáneamente enteros. Después de iniciar ese programa, establecimos un nuevo canal, que luego utilizamos para producir números en una goroutina y pasarlos a otra goroutina para que pudieran ser mostrados en la pantalla. Como demostración final de cómo iniciar una goroutina para acelerar sus aplicaciones en sistemas multinúcleo, lanzamos simultáneamente muchas goroutinas de "impresión".

Como sabemos, las goroutines son una forma de realizar tareas de forma más rápida y eficiente. Este es uno de los procedimientos de implementación que ofrece AppMaster para mejorar la funcionalidad de su aplicación. Con AppMaster, incluso las personas con poco o ningún conocimiento de programación pueden realizar tareas que serían difíciles de completar mediante codificación manual.

AppMaster es una no-code plataforma que es capaz de crear aplicaciones móviles y web , así como un backend. Un dato interesante AppMaster crea un backend mediante Go a 22.000 líneas por segundo y se puede acceder al código fuente.

Entradas relacionadas

La clave para desbloquear estrategias de monetización de aplicaciones móviles
La clave para desbloquear estrategias de monetización de aplicaciones móviles
Descubra cómo aprovechar todo el potencial de ingresos de su aplicación móvil con estrategias de monetización comprobadas que incluyen publicidad, compras dentro de la aplicación y suscripciones.
Consideraciones clave al elegir un creador de aplicaciones de IA
Consideraciones clave al elegir un creador de aplicaciones de IA
Al elegir un creador de aplicaciones de IA, es esencial considerar factores como las capacidades de integración, la facilidad de uso y la escalabilidad. Este artículo le guiará a través de las consideraciones clave para tomar una decisión informada.
Consejos para notificaciones push efectivas en PWA
Consejos para notificaciones push efectivas en PWA
Descubra el arte de crear notificaciones push efectivas para aplicaciones web progresivas (PWA) que impulsen la participación del usuario y garanticen que sus mensajes se destaquen en un espacio digital abarrotado.
EMPIEZA GRATIS
¿Inspirado para probar esto usted mismo?

La mejor manera de comprender el poder de AppMaster es verlo por sí mismo. Haz tu propia aplicación en minutos con suscripción gratuita

Da vida a tus ideas