Un hilo es una sola unidad de ejecución en un programa. Un programa ordinario es de un solo hilo, donde las instrucciones en el programa se ejecutan sucesivamente hasta la terminación.
Por otro lado, el programa múltiple permite que el programa cree múltiples hilos donde las instrucciones en un programa pueden ejecutarse simultáneamente. Ofrece una excelente utilización de recursos del sistema, como CPU y memoria.
En Ruby, usamos hilos con la ayuda de la clase de hilos. Los hilos en Ruby no tienen recursos pesados, lo que los hace eficientes para emplear la concurrencia en sus programas.
Los hilos se implementan dentro del intérprete Ruby para Ruby versión 1.9 y debajo. A partir de la versión 1.9 y superior, el subproceso se implementa en el sistema operativo.
Usando esta guía, aprenderá cómo implementar hilos en la programación de Ruby.
Punto de nota: El intérprete de Matz (MRI) tiene un bloqueo de intérprete global que evita que múltiples hilos se ejecuten simultáneamente. Sin embargo, esto no se aplica a los intérpretes de Jruby y Rubinius.
Creando un hilo
Como se mencionó, podemos trabajar con hilos usando la clase de hilo. Para crear un nuevo hilo, llame al hilo.Nuevo método.
La sintaxis es:
Hilo.nuevo # El bloque de subprocesos va aquí
Asegúrese de incluir el código que desea ejecutar por el hilo dentro del par de aparatos ortopédicos rizados.
Aquí hay un ejemplo:
Hilo.Nuevo pone "hola, mundo!"
Tomemos un programa simple que calcule el área de un círculo.
área de DEF
Pi = 3.14159
rad = 7.3
return (pi * rad * rad)
fin
Hilo.nuevo
área()
pone "correr dentro del hilo!"
Ponga "ejecución completa!"
Si ejecuta el ejemplo anterior, notará que no obtenemos el área del círculo. Esto se debe a que Ruby no espera a que los hilos creados terminen la ejecución. Para garantizar que se complete los subprocesos, necesitamos llamar al método de unión.
El método de unión pausará la ejecución del hilo principal y esperará a que los subprocesos especificados en el método de unión complete.
El siguiente es el código de ejemplo anterior con el método de unión implementado.
área de DEF
Pi = 3.14159
rad = 7.3
return (pi * rad * rad)
fin
hilo = hilo.nuevo
pone "El área del círculo es #área () CM2"
pone "correr dentro del hilo!"
hilo.unirse
Ponga "ejecución completa!"
En este ejemplo, obtenemos la salida del hilo como se muestra a continuación:
El área del círculo es 167.415331099999997 CM2
Corriendo dentro del hilo!
Ejecución completa!
Terminar un hilo
Ruby proporciona varias formas de terminar un hilo. Una de esta manera es usar el método de matar.
La sintaxis es:
Hilo.matar (hilo)
Especifique el nombre del hilo para terminar dentro del paréntesis.
Excepciones de hilo
Notará que si surge una excepción dentro de un hilo, la ejecución del programa no se detiene.
Por ejemplo:
Def Error_me
aumentar "error!"
fin
Hilo.Nuevo Error_me
Ponga "Todavía corro"
En el ejemplo anterior, planteamos una excepción dentro de la función pasada al hilo. Notarás dos cosas:
- El hilo no mostrará el mensaje de error
- El código después del hilo aún se ejecuta.
En algunos casos, es posible que desee detener la ejecución si surge una excepción dentro de un hilo. Podemos hacer esto usando el abort_on_execction.
Por ejemplo:
Hilo.abort_on_exception = verdadero
Thready = hilo.nuevo hacer
Ponga "Ejecuto antes de la excepción"
Se produjo una excepción "!"
fin
enhebrado.unirse
dice "Lo siento, no corro!"
En el ejemplo anterior, el programa terminará si se produce una ejecución dentro del hilo. Aquí hay una salida de ejemplo:
Corro antes de la excepción
# terminado con excepción (report_on_exception es verdadero):
hilos.RB: 4: en 'Bloque en': ocurrió la excepción! (Error de tiempo de ejecución)
hilos.RB: 4: en 'bloque en
': ocurrió una excepción! (Error de tiempo de ejecución) Variables de hilo
Las variables creadas en un hilo obedecen las reglas de alcance de Ruby. Solo son accesibles en el alcance del hilo en el que se crean.
Estados de hilo
Puede obtener el estado de un hilo dado utilizando el método de estado. También puede usar el vivo para verificar si el hilo se está ejecutando y detener para verificar si el hilo está muerto.
Hay cinco valores de retorno para el método de estado:
- Correr - Devoluciones de ejecución
- Dormir - regresa durmiendo
- Abortar - Devuelve abortando
- Terminado con excepción - Devuelve nulo
- Terminar normalmente - Devuelve falso.
Conclusión
En esta guía, discutimos los conceptos básicos de trabajar con hilos en el lenguaje de programación de Ruby.
Es bueno tener en cuenta que hay más de lo que hemos discutido en esta guía. Considere la documentación para obtener más información.
Gracias por leer!