I've been tidying my filing cabinet and came across an article describing an approach to co-operative multitasking which makes an interesting statement about the approach...
No interrupts - all I/O is polled. If the processor doesn't have enough time to poll for I/O then it doesn't have enough time to handle the worst-case arrival rate of interrupts.
I can't decide if I agree or not. It feels wrong to someone who has used interrupts for more years than I care to remember but the argument also feels right. If, over a long period of time, you don't have enough processing to deal with the amount of 'traffic' your system sees then it will fail. I think the approach fails in that interrupts can even out the processing required. Things like FIFO buffers on incoming UART data will keep up with incoming data faster than you can process it BUT you will then need a period of time when the UART is quiet to allow you to process the data. And if you adopt the no-interrupts approach then you can gain back processing time as you won't have the overhead of ISRs or buffer manipulation.
The approach is basically a timer tick which starts a while() loop that calls each task in turn. Each task is short and if needed is based around a state machine. So the total run time of all your tasks is less than the tick time. All tasks run on every tick.