24

Por lo tanto, estoy jugando con Stackless Python y una pregunta apareció en mi cabeza, tal vez esto es conocimiento "asumido" o "común", pero no pude encontrarlo realmente escrito en el stackless site.¿Pitón y multinúcleos apilados?

¿Aprovecha Stackless Python las CPU multinúcleo? En Python normal, usted tiene el GIL constantemente presente y para hacer (verdadero) uso de múltiples núcleos que necesita para usar varios procesos, ¿es esto cierto para Stackless también?

+0

aka Cooperative Multitasking .. –

Respuesta

39

Stackless python hace no hacer uso de cualquier tipo de entorno multi-core en el que se ejecuta.
Este es un error común sobre Stackless, ya que le permite al programador aprovechar la programación basada en subprocesos. Para muchas personas, estas dos están estrechamente entrelazadas, pero son, de hecho, dos cosas separadas.

Internamente Stackless utiliza un programador round-robin para programar cada tasklet (microhilos), pero no se puede ejecutar ningún tasklet simultáneamente con otro. Esto significa que si un tasklet está ocupado, los otros deben esperar hasta que ese tasklet renuncie al control. Por defecto, el planificador no detendrá un tasklet y dará tiempo de procesador a otro. Es responsabilidad del tasklet programarse al final de la cola de programación utilizando Stackless.schedule() o finalizando sus cálculos.

todas las tareas se ejecutan así de manera secuencial, incluso cuando hay núcleos multiplote disponibles.

La razón por la cual Stackless no tiene soporte multi-core es porque esto hace que los hilos sean mucho más fáciles. Y esto es precisamente lo que sin pérdida de velocidad tiene que ver con:

from the official stackless website

Stackless Python es una versión mejorada de la programación Python idioma. Permite que los programadores obtengan los beneficios de la programación basada en subprocesos sin el rendimiento y los problemas de complejidad asociados con subprocesos convencionales. Los microhilos que Stackless añade a Python son un conveniencia barato y ligero que puede si se utiliza adecuadamente , proporciona los siguientes beneficios:

  • estructura del programa mejorado.
  • Código más legible.
  • Aumento de la productividad del programador.

Aquí es una link a algo más de información sobre múltiples núcleos y sin pérdida de velocidad.