Protothreads are a type of extremely lightweight threads – each protothread requires only two bytes of memory – that are usually used for embedded firmware programming, where memory is at a premium. Protothreads combine the low overhead with event-driven programming with the algorithmic clarity of threaded programming.
Larry Ruane from LeftHand Networks Inc. has written a protothreads library for Unix systems that, unlike Adam Dunkels’ original library, contains a complete scheduler that allows several protothreads to run inside a regular thread. Ruane’s protothreads are implemented in less than 400 lines of C code using gcc’s labels-as-values feature. The project wiki has a thorough explanation of how protothreads work and how they are intended to be used. The open source code can be downloaded from the project’s SourceForge page.