Por qué el uso de hilos en Ruby y Python puede afectar el rendimiento de una aplicación

Los proyectos de multithreading y procesamiento paralelo son de especial interés para mí porque presentan un desafío único: como desarrollador, me centro en el código y no en cuestiones periféricas como el diseño de interfaz de usuario. Cuando escribí el motor Mongoose que impulsa mi aplicación Rat Catcher, utilicé la biblioteca .NET Parallel Extensions (PFx) para acelerar la ejecución de búsquedas. Aunque Mongoose no es exigente en términos de cómputo, realiza una gran cantidad de solicitudes de red que pueden tener un largo período de espera, por lo que ejecutarlas en paralelo puede ofrecer ganancias sustanciales de rendimiento.

Índice de Contenido
  1. Rewriting el motor Mongoose
  2. Las implicancias del GIL en Ruby y Python
    1. Ventajas del sistema GIL
    2. Desventajas del sistema GIL
  3. Alternativas para programas verdaderamente paralelos

Rewriting el motor Mongoose

Recientemente, he estado considerando reescribir el motor Mongoose en un lenguaje distinto a C#. Aunque estoy muy satisfecho con la implementación actual en C#, he estado pensando en trasladar Mongoose a un proveedor de servicios en la nube, y he notado una diferencia de precios lo suficientemente significativa entre los servidores de nube de Linux y Windows como para justificar la reescritura. Si bien usar Mono es una opción ahora que se ha lanzado la versión 2.8 con soporte para PFx, también pensé que sería una buena oportunidad para probar Python o Ruby con este propósito. En el proceso, aprendí un poco sobre cómo funciona el threading en estos lenguajes y cómo puede afectar la decisión de un desarrollador de utilizarlos para un proyecto.

Las implicancias del GIL en Ruby y Python

En las implementaciones estándar de Ruby y Python (MRI y CPython, respectivamente), los lenguajes utilizan un Bloqueo Global del Intérprete (GIL, por sus siglas en inglés). El mecanismo de GIL realiza la división del tiempo y la programación de hilos. Así es como funciona: cada hilo tiene acceso exclusivo al GIL durante un breve período de tiempo, realiza alguna tarea y lo libera. Mientras tanto, los demás hilos están en espera, esperando tener la oportunidad de acceder al GIL. Cuando se libera el GIL, un hilo aleatorio puede acceder a él y comenzar a ejecutarse.

Ventajas del sistema GIL

Hay dos ventajas principales al usar este sistema. La primera es que puedes escribir código en estos lenguajes que utiliza threading, y se ejecutará en un sistema operativo que no admite threading de forma nativa, sin necesidad de realizar modificaciones. La segunda es que, debido a que solo se ejecuta un hilo a la vez, no hay problemas de seguridad de threads, incluso al trabajar con una biblioteca no compatible con hilos.

Desventajas del sistema GIL

Sin embargo, hay algunas desventajas importantes. La más grande es que los múltiples hilos nunca se ejecutan al mismo tiempo. Aunque tu aplicación pueda parecer que se está ejecutando en paralelo, en realidad, el proceso nunca tiene más de un hilo y simplemente salta aleatoriamente entre diferentes tareas dentro de ese hilo. Esto nos lleva a nuestro segundo problema, que es la velocidad. No verás ninguna ventaja de velocidad en máquinas multicore o multiprocesador porque solo se ejecuta un hilo a la vez. Además, habrá una desaceleración debido a los costos de cambio de contexto.

Alternativas para programas verdaderamente paralelos

El uso de GIL hace que una aplicación con hilos sea una mala idea en muchos casos (si no en la mayoría). Afortunadamente, existen opciones. En primer lugar, el GIL no está obligado por las especificaciones del lenguaje. Hay algunas implementaciones que no usan el GIL (por ejemplo, JRuby e IronRuby). Además, puedes recurrir fácilmente al modelo de procesos, que tanto Ruby como Python admiten, utilizando los mecanismos tradicionales de bifurcación y unión (fork/join). Aunque puede que no sea ideal (o posible) utilizar una implementación diferente o escribir tu aplicación para depender de la bifurcación, es bueno saber que existen alternativas que hacen posible programas verdaderamente paralelos en Ruby y Python.

5 reglas para trabajar con cadenas de texto en VBA

En Newsmatic nos especializamos en tecnología de vanguardia, contamos con los artículos mas novedosos sobre Desarrollo, allí encontraras muchos artículos similares a Por qué el uso de hilos en Ruby y Python puede afectar el rendimiento de una aplicación , tenemos lo ultimo en tecnología 2023.

Artículos Relacionados

Subir

Utilizamos cookies para mejorar su experiencia de navegación, mostrarle anuncios o contenidos personalizados y analizar nuestro tráfico. Al hacer clic en “Aceptar todo” usted da su consentimiento a nuestro uso de las cookies.