Articulo de referencia

Protohilo

Un protothread es un mecanismo de baja sobrecarga para programación concurrente . Los protothreads funcionan como subprocesos livianos y sin pila , o corrutinas , que brindan un...

Un protothread es un mecanismo de baja sobrecarga para programación concurrente .

Los protothreads funcionan como subprocesos livianos y sin pila , o corrutinas , que brindan un contexto de bloqueo de manera económica utilizando una memoria mínima por protothread (del orden de bytes individuales).

Los protothreads se utilizan para lograr una forma de concurrencia no preemptada conocida como multitarea cooperativa y, por lo tanto, no incurren en un cambio de contexto cuando ceden a otro hilo. Dentro de un protothread, la cesión se logra utilizando el dispositivo de Duff dentro de la función de un hilo y una variable externa utilizada en la declaración switch . Esto permite saltar (reanudar) desde una cesión al llamar a otra función. Para bloquear hilos, estas cesión se pueden proteger con una condición de modo que las llamadas sucesivas a la misma función cedan a menos que la condición de protección sea verdadera.

Una característica de los protothreads en relación con otras implementaciones de corrutinas , o subprocesos propios, es que no tienen pila. Esto tiene ventajas y desventajas. Una desventaja es que no se puede confiar en que las variables locales dentro del protothread hayan conservado sus valores a lo largo de un yield a otro contexto. Deben conservar su estado mediante el uso de variables estáticas o externas, a menudo globales . [1] Una ventaja es que son muy ligeros y, por lo tanto, útiles en sistemas con limitaciones de memoria severas, como microcontroladores pequeños, donde otras soluciones son poco prácticas o menos deseables.

Tom Duff , el creador del dispositivo Duff , dijo lo siguiente sobre las deficiencias del método: "un truco similar para las máquinas de estado controladas por interrupciones que es demasiado horrible para explicarlo. [...] Nunca pensé que fuera una implementación de corrutina de propósito general adecuada porque no es fácil tener múltiples activaciones simultáneas de una corrutina y no es posible usar este método para que las corrutinas cedan el control en cualquier lugar que no sea su rutina de nivel superior. Una biblioteca de cambio de pila en lenguaje ensamblador simple le permite hacer ambas cosas". [2]

El concepto de protothread fue desarrollado por Adam Dunkels y Oliver Schmidt, [3] basándose en trabajos previos de Simon Tatham [4] y Tom Duff . [2]

Véase también

Referencias

  1. ^ A. Dunkels, O. Schmidt, T. Voigt y M. Ali, Protothreads: Simplificación de la programación basada en eventos de sistemas integrados con restricciones de memoria, Proc. ACM SenSys , Boulder, Colorado, EE. UU., noviembre de 2006. (PDF, diapositivas de la presentación)
  2. ^ ab "Brainwagon » Corrutinas en C".
  3. ^ Adam Dunkels. "Protothreads: hilos livianos y sin apilar en C". Dunkels.com . Consultado el 21 de abril de 2017 .
  4. ^ "Corrutinas en C".
  • Biblioteca Protothread en C utilizada por Contiki
  • Uso de Protothreads para la programación de nodos de sensores Un PDF con una discusión en profundidad sobre el uso de Protothreads
  • Biblioteca Protothread que requiere GCC e incluye un programador de subprocesos basado en el núcleo UNIX (una forma simplificada de las variables de condición POSIX ). Esta base de código fuente también incluye una versión que admite varios núcleos de CPU (procesadores).
  • eigenclass.org realizó una comparación de protothreads con subprocesos POSIX y encontró una mejora de 400x en la velocidad [1] Recuperado de Archive.org en octubre de 2014
  • Protohilo de C++
  • Implementación del protothread C++ de Symbian
Obtenido de "https://es.wikipedia.org/w/index.php?title=Protothread&oldid=1056515489"