Articulo de referencia

Python sin pila

Stackless Python , o Stackless , era un intérprete del lenguaje de programación Python . Su repositorio de GitHub se archivó en febrero de 2025 y el proyecto se ha discontinuado...

Stackless Python , o Stackless , era un intérprete del lenguaje de programación Python . Su repositorio de GitHub se archivó en febrero de 2025 y el proyecto se ha discontinuado oficialmente.

Se le denominó así porque evita depender de la pila de llamadas de C para su propia pila. En la práctica, Stackless Python utiliza la pila de C, pero esta se vacía entre llamadas a funciones. [ 2 ] La característica más destacada de Stackless son los microhilos , que evitan gran parte de la sobrecarga asociada con los hilos habituales del sistema operativo . Además de las características de Python, Stackless también añade soporte para corrutinas , canales de comunicación y serialización de tareas .

Diseño

Con Stackless Python, un programa en ejecución se divide en microhilos gestionados por el intérprete del lenguaje, no por el núcleo del sistema operativo . El cambio de contexto y la planificación de tareas se realizan exclusivamente en el intérprete (por lo que también se consideran un tipo de hilo ligero ). Los microhilos gestionan la ejecución de diferentes subtareas de un programa en el mismo núcleo de la CPU. De este modo, constituyen una alternativa a la programación asíncrona basada en eventos y, además, evitan la sobrecarga que supone el uso de hilos separados para programas de un solo núcleo (ya que no es necesario cambiar entre el modo de usuario y el modo de núcleo, lo que reduce el uso de la CPU).

Aunque los microhilos facilitan la ejecución de subtareas en un solo núcleo, Stackless Python no elimina el bloqueo global del intérprete (GIL) de CPython, ni utiliza múltiples hilos o procesos. Por lo tanto, solo permite la multitarea cooperativa en una CPU compartida y no el paralelismo (la preempción no estaba disponible originalmente, pero ahora lo está de alguna forma [ 3 ] ). Para utilizar múltiples núcleos de CPU, aún sería necesario construir un sistema de comunicación entre procesos sobre los procesos de Stackless Python.

Debido a la considerable cantidad de cambios en el código fuente, Stackless Python no se puede instalar en una instalación de Python preexistente como extensión o biblioteca . En cambio, es una distribución completa de Python en sí misma. La mayoría de las características de Stackless también se han implementado en PyPy , un intérprete de Python autoalojado y compilador JIT . [ 4 ]

Usar

Aunque Stackless es una distribución independiente, su funcionalidad de conmutación se ha empaquetado con éxito como una extensión de CPython llamada greenlet. [ 5 ] Varias bibliotecas la utilizan (por ejemplo, gevent [ 6 ] ) para proporcionar una solución de subprocesos ecológicos para CPython. Python ha recibido desde entonces una solución nativa alternativa para la programación asíncrona que se ejecuta en un solo subproceso: await /async.

Stackless se utiliza ampliamente en la implementación del juego multijugador masivo en línea Eve Online , así como en la plataforma de correo de IronPort .

Véase también

Referencias

  1. "Versión v3.8.1-slp" . 12 de agosto de 2021. Consultado el 8 de marzo de 2022 .
  2. Archivado en Ghostarchivey la Wayback Machine: La historia de Python sin pila . YouTube .
  3. "Acerca de Stackless" . Archivado del original el 23 de junio de 2020. Recuperado el 26 de agosto de 2016. Incluye un planificador round robin . Puede utilizarse para programar tareas de forma cooperativa o preventiva.
  4. "Funcionalidades de Stackless a nivel de aplicación — Documentación de PyPy" . pypy.readthedocs.org .
  5. "greenlet: Programación concurrente ligera — documentación de greenlet 0.4.0" . greenlet.readthedocs.org .
  6. ^ "¿Qué es gevent? - documentación de gevent 1.3.0.dev0" . www.gevent.org .
  • Sitio web oficialEdita esto en Wikidata
  • Documentación de Stackless Python para: 3.7-slp , 3.6-slp , 3.5-slp , 3.4-slp , 2.7-slp
  • Stackless en GitHub
  • Programación de juegos multihilo con Python sin pila por Harry Kalogirou
  • Continuaciones y Python sin pila por Christian Tismer