2008年7月29日星期二

Protothreads, an extremely lightweight stackless threads

Protothreads are extremely lightweight stackless threads designed for
severely memory constrained systems, such as small embedded systems or
wireless sensor network nodes. Protothreads provide linear code
execution for event-driven systems implemented in C. Protothreads can
be used with or without an underlying operating system to provide
blocking event-handlers. Protothreads provide sequential flow of
control without complex state machines or full multi-threading.
#include "pt.h"

struct pt pt;
struct timer timer;

PT_THREAD(example(struct pt *pt))
{
PT_BEGIN(pt);

while(1) {
if(initiate_io()) {
timer_start(&timer);
PT_WAIT_UNTIL(pt,
io_completed() ||
timer_expired(&timer));
read_data();
}
}
PT_END(pt);
}
Example protothreads code.

While protothreads originally were created for memory-constrained
embedded systems, it has found many uses as a general purpose library
too. Examples include multimedia streaming server software, grid
computing research software, and MPEG decoding software for Internet
TVs.

Read more...

Main features:
Very small RAM overhead - only two bytes per protothread and no extra stacks
Highly portable - the protothreads library is 100% pure C and no
architecture specific assembly code
Can be used with or without an OS
Provides blocking wait without full multi-threading or stack-switching
Freely available under a BSD-like open source license

Example applications:
Memory constrained systems
Event-driven protocol stacks
Small embedded systems
Sensor network nodes
Portable C applications

没有评论: