Python y multicores sin pérdida de velocidad?
-
22-08-2019 - |
Pregunta
Por lo tanto, estoy jugando un poco con Stackless Python y una pregunta aparecido en mi cabeza, tal vez esto es "supuesto" o conocimiento "común", pero no pude encontrar lo que realmente escrito en ninguna parte en la sitio sin apilado .
¿Tiene Stackless Python tomar ventaja de las CPU de varios núcleos? En Python normal, usted tiene la GIL estar constantemente presente y para hacer (verdadero) el uso de múltiples núcleos que hay que utilizar varios procesos, esto es verdad para Stackless también?
Solución
pitón Stackless hace no hacer uso de cualquier tipo de entorno multi-núcleo que puede correr.
Este es un error común acerca de Stackless, ya que permite al programador para tomar ventaja de la programación basada en hilo. Para muchas personas estos dos están estrechamente entrelazados, pero son, de hecho dos cosas separadas.
Internamente Stackless utiliza un planificador round-robin para programar cada tasklet (micro roscas), pero sin tasklet se puede ejecutar simultáneamente con otro. Esto significa que si uno está ocupado tasklet, los demás deben esperar hasta que tasklet cede el control. Por defecto, el planificador no se detendrá un tasklet y darle tiempo de procesador a otro. Es responsabilidad del tasklet para programar mismo de vuelta en el final de la cola de planificación utilizando Stackless.schedule (), o al terminar sus cálculos.
todos tasklets este modo se ejecutan de forma secuencial , incluso cuando núcleos multiplpe están disponibles.
La razón por la Stackless no tiene soporte multi-núcleo es porque esto hace que las discusiones mucho más fácil. Y esto es precisamente lo que sin pérdida de velocidad tiene que ver con:
desde el sitio web oficial sin apilado
Stackless Python es un mejorada versión de la programación Python idioma. Se permite a los programadores cosechar los beneficios de hilo a base de programación sin la actuación y los problemas de la complejidad asociados con hilos convencionales. los microhilos que se suma a Stackless Python es un barato y ligero conveniencia que puede si se usa adecuadamente, dar los siguientes beneficios:
- Mejora de la estructura del programa.
- código sea más legible.
- El aumento de la productividad del programador.
Aquí hay un enlace a algo más de información sobre el acceso múltiple núcleos y sin pérdida de velocidad.