Protothread
A protothread is a low-overhead mechanism for concurrent programming.
Protothreads function as stackless, lightweight threads providing a blocking context cheaply using minimal memory per protothread (on the order of single bytes).
Protothreads are used to accomplish a non-preempted form of concurrency known as cooperative multitasking and, therefore, do not incur context switch when yielding to another thread. Within a protothread, yielding is accomplished by utilizing Duff's device within a thread's function and an external variable used in within the switch statement. This allows jumping (resuming) from a yield upon another function call. In order to block threads, these yields may be guarded by a conditional so that successive calls to the same function will yield unless the guard conditional is true. Because protothreads are accomplished by successive calls to a function, they must retain their state through the use of external, often global, variables.[1]
The protothread concept was developed by Adam Dunkels and Oliver Schmidt.[2]
See also
References
- ↑ A. Dunkels, O. Schmidt, T. Voigt, and M. Ali, Protothreads: Simplifying Event-Driven Programming of Memory-Constrained Embedded Systems, Proc. ACM SenSys, Boulder, CO, USA, Nov 2006. (PDF, Presentation slides)
- ↑ Adam Dunkels. "Protothreads - Lightweight, Stackless Threads in C". Dunkels.com. Retrieved April 21, 2017.
External links
- Protothread library in C used by Contiki
- Using Protothreads for Sensor Node Programming A PDF with some in-depth discussion about the use of Protothreads
- Protothread library requiring GCC, includes a thread scheduler modeled on the UNIX kernel (a simplified form of POSIX condition variables). This source base also includes a version that supports multiple CPU cores (processors).
- eigenclass.org performed a comparison of protothreads against POSIX threads, and found a 400x improvement in speed Retrieved from Archive.org Oct 2014
- C++ Protothread
- Symbian C++ Protothread Implementation