thread hilos entre eliminar ejemplos detener comunicacion como basics python multithreading pthreads gil green-threads

hilos - queue python 3



Hilos verdes e hilo en Python (2)

Como Wikipedia dice :

Los subprocesos verdes emulan entornos de subprocesos múltiples sin depender de ninguna capacidad de sistema operativo nativo, y se administran en espacio de usuario en lugar de en espacio de kernel, lo que les permite trabajar en entornos que no tienen soporte nativo de subprocesos.

Los subprocesos de Python se implementan como pthreads (kernel threads) y, debido al bloqueo de intérprete global (GIL), un proceso de Python solo ejecuta un subproceso a la vez.

[ PREGUNTA ] Pero en el caso de Green-threads (o los llamados greenlets o tasklets),

  1. ¿El GIL afecta? ¿Puede haber más de un greenlet corriendo a la vez?
  2. ¿Cuáles son los peligros de usar greenlets o tasklets?
  3. Si uso greenlets, ¿cuántos de ellos puede manejar un proceso? (Me pregunto porque en un único proceso puede abrir subprocesos hasta ulimit ( -s , -v ) establecidos en su sistema * ix).

Necesito un poco de información, y sería útil si alguien pudiera compartir su experiencia o guiarme por el camino correcto.


Puedes pensar que los greenlets son más como hilos cooperativos. Lo que esto significa es que no hay un programador que cambie de manera preventiva entre sus hilos en un momento dado; en cambio, sus puntos verdes voluntariamente / explícitamente ceden el control entre sí en puntos específicos de su código.

¿El GIL los afecta? ¿Puede haber más de un greenlet corriendo a la vez?

Solo se está ejecutando una ruta de código a la vez; la ventaja es que usted tiene el control final sobre cuál es esa.

¿Cuáles son los peligros de usar greenlets o tasklets?

Debes tener más cuidado: un greenlet mal escrito no cederá el control a otros greenlets. Por otro lado, dado que sabe cuándo se cambiará el contexto de un punto verde, es posible que pueda salirse con la suya sin crear bloqueos para estructuras de datos compartidas.

Si uso greenlets, ¿cuántos de ellos puede manejar un proceso? (Me pregunto porque en un único proceso puede abrir subprocesos hasta umask limit set en su sistema * ix).

Con subprocesos regulares, cuanto más tenga, más gastos de planificación tendrá. También los hilos regulares todavía tienen una sobrecarga de cambio de contexto relativamente alta. Greenlets no tiene esta sobrecarga asociada a ellos. De la documentación de la botella :

La mayoría de los servidores limitan el tamaño de sus grupos de trabajadores a un número relativamente bajo de subprocesos concurrentes, debido a la alta sobrecarga involucrada al cambiar entre y crear nuevos subprocesos. Si bien los hilos son baratos en comparación con los procesos (tenedores), todavía son costosos de crear para cada nueva conexión.

El módulo gevent agrega greenlets a la mezcla. Los Greenlets se comportan de manera similar a los hilos tradicionales, pero son muy baratos de crear. Un servidor basado en gevent puede generar miles de puntos verdes (uno para cada conexión) casi sin gastos generales. El bloqueo de greenlets individuales no tiene ningún impacto en la capacidad del servidor para aceptar nuevas solicitudes. La cantidad de conexiones concurrentes es virtualmente ilimitada.

También hay algunas lecturas adicionales aquí si estás interesado: http://sdiehl.github.io/gevent-tutorial/


Supongo que estás hablando de violetas de evenlet / gevent

1) Puede haber solo un greenlet ejecutándose

2) Es un multihilo cooperativo, lo que significa que si un greenlet está atascado en un bucle infinito, todo su programa está atascado, normalmente los greenlets se programan explícitamente o durante I / O

3) Mucho más que hilos, depende de la cantidad de RAM disponible